我是 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()')
请帮我。
Thanks
就像 Avihoo Mamka 在评论中提到的那样,您需要提供一些额外的请求标头,以免被该网站拒绝。
在这种情况下,它似乎只是User-Agent
标头。默认情况下,scrapy 通过用户代理来标识自己"Scrapy/{version}(+http://scrapy.org)"
。有些网站可能会出于某种原因拒绝这一点。
为了避免这种情况只需设置headers
你的参数Request
使用通用用户代理字符串:
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
yield Request(url, headers=headers)
你可以找到一个巨大的用户代理列表在这里 http://www.useragentstring.com/pages/useragentstring.php,但您应该坚持使用流行的网络浏览器,例如 Firefox、Chrome 等,以获得最佳结果
你可以实现它来与你的蜘蛛一起工作start_urls
too:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)