我是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()')请帮帮我。
谢谢
发布于 2016-08-29 17:23:14
就像评论中提到的Avihoo Mamka一样,你需要提供一些额外的请求头,才不会被这个网站拒绝。
在这种情况下,它似乎只是User-Agent头。默认情况下,scrapy将自己标识为用户代理"Scrapy/{version}(+http://scrapy.org)"。一些网站可能会因为这样或那样的原因而拒绝这样做。
要避免这种情况,只需使用通用用户代理字符串设置Request的headers参数:
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等,以获得最好的结果
你也可以实现它来和你的爬虫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)发布于 2020-05-13 13:31:21
在settings.py文件中添加以下脚本。如果您将selenium与scrapy结合使用,则可以很好地工作。
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}https://stackoverflow.com/questions/39202058
复制相似问题