【发布时间】:2019-07-08 18:49:05
【问题描述】:
This 是我正在抓取的网站的站点地图网址。我希望我的蜘蛛从以 /property 开头的页面中抓取数据。
问题是,当发送没有标头的请求时,这些页面不会向我显示正确的响应。该请求需要一个用户代理标头。
我想出了一个这样的解决方案。首先,以/property开头的url被parse方法抓取,该方法得到一个空响应。通过parse 方法发送相同的请求以及标头,并通过parse_items 方法抓取正确的响应。
parse_items 方法永远不会被调用,shell 进程永远不会启动。我不明白为什么没有达到parse_items。有什么方法可以定义像start_requests 这样的方法,这样我就可以覆盖SitemapSpider 类的parse 方法的行为。
class MySpider(SitemapSpider):
name = 'myspider'
sitemap_urls = [
'https://www.iproperty.com.my/sitemap_index.xml',
]
sitemap_rules = [
('/property', 'parse'),
]
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
def parse(self, response):
yield scrapy.Request(
url=response.url,
method='GET',
headers=self.headers,
callback=self.parse_items
)
def parse_items(self, response):
from scrapy.shell import inspect_response
inspect_response(response, self)
【问题讨论】:
-
headers是什么?
标签: python web-scraping scrapy web-crawler sitemap