我是新来的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()')
请帮帮我。
谢谢
4条答案
按热度按时间cvxl0en21#
就像评论中提到的Avihoo Mamka一样,你需要提供一些额外的请求头才不会被这个网站拒绝。
在这种情况下,它似乎只是
User-Agent
头。默认情况下,scrapy将自己标识为用户代理"Scrapy/{version}(+http://scrapy.org)"
。一些网站可能会因为这样或那样的原因而拒绝它。要避免这种情况,只需使用公共用户代理字符串设置
Request
的headers
参数:你可以找到一个巨大的list of user-agents here,尽管你应该坚持使用流行的网络浏览器,如火狐,Chrome等,以获得最佳效果
您也可以将其实现为与spider
start_urls
一起使用:p1tboqfb2#
在您的www.example.com文件中添加以下脚本settings.py。
jrcvhitl3#
我只需要让我的外壳工作,并运行一些快速测试,所以花岗岩龙的解决方案对我来说有点大材小用。
我真的去了settings.py,你会发现大多数东西都被注解掉了。在第16-17行或者其他地方,你会发现这样的东西...
您只需要取消注解它,并将其替换为任何用户代理,如
'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'
您可以在这里找到它们的列表https://www.useragentstring.com/pages/useragentstring.php[][1]
所以它看起来像这样...
如果你想做一个大规模的爬虫,你肯定会想轮换用户代理。但是我只需要让我的scrapy shell工作起来,做一些快速的测试,而不会出现讨厌的403错误,所以这一行就足够了。这很好,因为我不需要做一个花哨的函数或任何东西。
快乐的刮擦
**注意:**请确保您在运行scrapy shell时与www.example.com位于同一目录下settings.py,以便使用您刚才所做的更改。如果您在父目录下,则此命令无效。
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
您可以看到,即使我在Windows 10上,并且Request()中有Macintosh,它也能正常工作。
您还可以使用前面的步骤将选定的头添加到文件“settings.py“。
注1:以下stackoverflow网页中的评论也或多或少相关(我在本例中使用它们):
注2:我也建议阅读,例如: