我正在尝试从以下URL抓取数据:
我一直在使用scrapy shell命令,因此我可以调试从爬网该站点获得的响应。
当我在终端中使用response.css('#divSideBar div h3').get(default='')
时,我得到一个空响应。我最终使用下面的选择器进行了升级……response.css('#divSideBar').get(default='')
,我得到了一堆空白字符\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
我可以使用Chrome中的开发者工具选择合适的元素。我也检查了Chrome中的“网络”标签,其内容来自我抓取的网址:
是否有一种方法可以访问具有#divSideBar
id的元素的内容?
答案 0 :(得分:1)
实际上,所有数据均来自动态post
请求。
您需要执行的操作是,根据您在检查网络标头标签中看到的请求,向另一个FormRequest
发送一些必要的parameter
。
def parse(self, response):
target_headers = {
'Accept' : '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4',
'Connection' : 'keep-alive',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Referer' : request.url,
}
yield FormRequest(request.url, formdata={...}, method='POST',
headers=target_headers, meta=response.meta, callback=self.parse_detail)
def parse_detail(self, response):
# crawl your data here