scrapy 如何解决403错误中的报废

oo7oh9g9  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(189)

我是新来的scrapy和我做了scrapy项目 scrapy 数据。
我试图从网站上收集数据,但我得到以下错误日志

2016-08-29 14:07:57 [scrapy] INFO: Enabled item pipelines:
[]
2016-08-29 13:55:03 [scrapy] INFO: Spider opened
2016-08-29 13:55:03 [scrapy] INFO: Crawled 0 pages (at 0 pages/min),scraped 0 items (at 0 items/min)
2016-08-29 13:55:04 [scrapy] DEBUG: Crawled (403) <GET http://www.justdial.com/robots.txt> (referer: None)
2016-08-29 13:55:04 [scrapy] DEBUG: Crawled (403) <GET http://www.justdial.com/Mumbai/small-business> (referer: None)
2016-08-29 13:55:04 [scrapy] DEBUG: Ignoring response <403 http://www.justdial.com/Mumbai/small-business>: HTTP status code is not handled or not allowed
2016-08-29 13:55:04 [scrapy] INFO: Closing spider (finished)

我尝试以下命令,然后在网站控制台,然后我得到了响应,但当我使用相同的路径内Python脚本,然后我得到了我上面描述的错误。
Web主控台上的指令:

$x('//div[@class="col-sm-5 col-xs-8 store-details sp-detail paddingR0"]/h4/span/a/text()')
$x('//div[@class="col-sm-5 col-xs-8 store-details sp-detail paddingR0"]/p[@class="contact-info"]/span/a/text()')

请帮帮我。
谢谢

cvxl0en2

cvxl0en21#

就像评论中提到的Avihoo Mamka一样,你需要提供一些额外的请求头才不会被这个网站拒绝。
在这种情况下,它似乎只是User-Agent头。默认情况下,scrapy将自己标识为用户代理"Scrapy/{version}(+http://scrapy.org)"。一些网站可能会因为这样或那样的原因而拒绝它。
要避免这种情况,只需使用公共用户代理字符串设置Requestheaders参数:

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
yield Request(url, headers=headers)

你可以找到一个巨大的list of user-agents here,尽管你应该坚持使用流行的网络浏览器,如火狐,Chrome等,以获得最佳效果
您也可以将其实现为与spider start_urls一起使用:

class MySpider(scrapy.Spider):
    name = "myspider"
    start_urls = (
        'http://scrapy.org',
    )

    def start_requests(self):
        headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
        for url in self.start_urls:
            yield Request(url, headers=headers)
p1tboqfb

p1tboqfb2#

在您的www.example.com文件中添加以下脚本settings.py。

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
jrcvhitl

jrcvhitl3#

我只需要让我的外壳工作,并运行一些快速测试,所以花岗岩龙的解决方案对我来说有点大材小用。
我真的去了settings.py,你会发现大多数东西都被注解掉了。在第16-17行或者其他地方,你会发现这样的东西...


# Crawl responsibly by identifying yourself (and your website) on the user-agent

# USER_AGENT = 'exercise01part01 (+http://www.yourdomain.com)'

您只需要取消注解它,并将其替换为任何用户代理,如'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'
您可以在这里找到它们的列表https://www.useragentstring.com/pages/useragentstring.php[][1]
所以它看起来像这样...


# Crawl responsibly by identifying yourself (and your website) on the user-agent

USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'

如果你想做一个大规模的爬虫,你肯定会想轮换用户代理。但是我只需要让我的scrapy shell工作起来,做一些快速的测试,而不会出现讨厌的403错误,所以这一行就足够了。这很好,因为我不需要做一个花哨的函数或任何东西。
快乐的刮擦

**注意:**请确保您在运行scrapy shell时与www.example.com位于同一目录下settings.py,以便使用您刚才所做的更改。如果您在父目录下,则此命令无效。

vmjh9lq9

vmjh9lq94#

整个错误解决过程怎么可能看起来像:
1.你可以在https://www.useragentstring.com/pages/useragentstring.php上找到一个巨大的用户代理列表,尽管你应该坚持使用流行的网络浏览器,如Firefox,Chrome等,以获得最佳效果(在如何解决403错误中找到更多信息)。
1.下面是我在Scrapy Shell中为Windows 10工作的步骤示例:https://www.useragentstring.com/pages/useragentstring.php-〉从浏览器中选择1个链接(但您也可以尝试从CRAWLERS链接中选择一个链接,...)-〉例如Chrome = https://www.useragentstring.com/pages/Chrome/-〉选择1行,例如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36-〉从该行中选择1个部分(属于一起的文本),例如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)-〉命令提示符-〉进入项目文件夹-〉scrapy shell

from scrapy import Request
    req = Request('https://www.whiskyshop.com/scotch-whisky?item_availability=In+Stock', headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)'})
    fetch(req)
  • 现在,结果应该是200。

您可以看到,即使我在Windows 10上,并且Request()中有Macintosh,它也能正常工作。
您还可以使用前面的步骤将选定的头添加到文件“settings.py“。
注1:以下stackoverflow网页中的评论也或多或少相关(我在本例中使用它们):

https://stackoverflow.com/questions/52196040/scrapy-shell-and-scrapyrt-got-403-but-scrapy-crawl-works, 
https://stackoverflow.com/questions/16627227/problem-http-error-403-in-python-3-web-scraping, 
https://stackoverflow.com/questions/37010524/set-headers-for-scrapy-shell-request

注2:我也建议阅读,例如:

https://scrapeops.io/web-scraping-playbook/403-forbidden-error-web-scraping/
https://scrapeops.io/python-scrapy-playbook/scrapy-managing-user-agents/
https://www.simplified.guide/scrapy/change-user-agent

相关问题