相关疑难解决方法(0)

如何使用scrapy CrawlSpider请求发送cookie?

我正在尝试使用Python的Scrapy框架创建这个Reddit 剪贴板.

我已经使用CrawSpider来爬行Reddit及其subreddits.但是,当我遇到包含成人内容的网页时,该网站会要求提供Cookie over18=1.

所以,我一直在尝试发送一个cookie,其中包含蜘蛛所做的每一个请求,但是,它没有成功.

在这里,是我的蜘蛛代码.正如您所看到的,我尝试使用该start_requests()方法为每个蜘蛛请求添加一个cookie .

这里有人能告诉我怎么做吗?或者我做错了什么?

from scrapy import Spider
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from reddit.items import RedditItem
from scrapy.http import Request, FormRequest

class MySpider(CrawlSpider):
    name = 'redditscraper'
    allowed_domains = ['reddit.com', 'imgur.com']
    start_urls = ['https://www.reddit.com/r/nsfw']

    rules = (
        Rule(LinkExtractor(
            allow=['/r/nsfw/\?count=\d*&after=\w*']),
            callback='parse_item',
            follow=True),
    )

    def start_requests(self):
        for i,url in enumerate(self.start_urls):
            print(url)
            yield Request(url,cookies={'over18':'1'},callback=self.parse_item)

    def parse_item(self, response):
        titleList = response.css('a.title')

        for title in titleList:
            item = RedditItem()
            item['url'] …
Run Code Online (Sandbox Code Playgroud)

python cookies scrapy web-scraping

16
推荐指数
2
解决办法
1万
查看次数

如何在Scrapy CrawlSpider请求中添加标题?

我正在使用CrawlSpider类来抓取网站,我想修改每个请求中发送的标头.具体来说,我想将referer添加到请求中.

根据这个问题,我查了一下

response.request.headers.get('Referer', None)
Run Code Online (Sandbox Code Playgroud)

在我的响应解析功能和Referer标头不存在.我认为这意味着请求中没有提交Referer(除非网站没有返回它,我不确定).

我无法弄清楚如何修改请求的标头.我的蜘蛛再次来自CrawlSpider.覆盖CrawlSpider _requests_to_follow或指定process_request规则的回调将不起作用,因为在这些时候引用不在范围内.

有谁知道如何动态修改请求标头?

python scrapy

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

python ×2

scrapy ×2

cookies ×1

web-scraping ×1