参考我的代码如下:
import scrapy
headers = \
{'Host': 'log.rlsbb.cc',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Referer': 'https://log.rlsbb.cc/',
'Cookie': 'filters=foreign-movies,movies,tv-shows,old-movies,_foreign-movies_f-webrip,_foreign-movies_f-dvdrip-bdrip,\
_foreign-movies_f-bluray-720p,_foreign-movies_f-bluray-1080p,_movies_bluray-1080p,_movies_bluray-720p,_movies_bdrip,\
_movies_webrip,_movies_dvdrip,_movies_4k-uhd,_tv-shows_top,_tv-shows_tv-packs,_movies_old,_foreign-movies_f-old',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Sec-GPC': '1',
'DNT': '1',
'TE': 'trailers'}
class ScrapeRlsBBRssSpider(scrapy.Spider):
name = 'scrape_rlsbb_rss'
allowed_domains = ['log.rlsbb.cc/feed']
start_urls = ['http://https://log.rlsbb.cc/feed/']
custom_settings={ 'FEED_URI': f"{name}_%(time)s.json",
'FEED_FORMAT': 'json'}
def start_requests(self):
urls = [
'https://log.rlsbb.cc/feed/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse, headers=headers)
def parse(self, response):
for post in response.xpath('//channel/item'):
yield {
'title' : post.xpath('title//text()').extract_first(),
'link': post.xpath('link//text()').extract_first(),
'pubDate' : post.xpath('pubDate//text()').extract_first(),
'category': post.xpath('category//text()').extract_first(),
}
我已经使用website上提供的选项(齿轮图标)过滤了我的RSS feed。当我按RSS图标获取提要链接时,它会显示上面的链接以及所需的过滤链接。
然后我在scrappy中使用上面的feed链接下载了RSS XML。输出不起作用,因为它包含了所有未过滤的链接和一些过滤的链接。然后我在头文件的cookie字段中应用了过滤器(见代码),它返回了一个空文件。
我做错了什么或误解了什么?
任何帮助都将不胜感激。
1条答案
按热度按时间wbgh16ku1#
通过添加相对xpath表达式和删除自定义头,我成功地提取了数据,但我不确定相对xpath部分是否真的有必要。
输出: