【发布时间】:2016-02-18 03:34:46
【问题描述】:
我是使用 Scrapy 抓取网页的新手,不幸的是选择了一个动态的开始...
我已经成功爬取了部分(120 个链接),感谢有人帮助我here,但不是target website 中的链接
经过一番研究,我知道爬ajax web和那些简单的想法没有什么不同:
•打开浏览器开发者工具、网络标签
•转到目标站点
•单击提交按钮并查看发送到服务器的 XHR 请求
•在你的蜘蛛中模拟这个 XHR 请求
最后一个对我来说听起来很模糊---如何模拟 XHR 请求?
我见过有人使用'headers'或'formdata'等参数来模拟。不明白这是什么意思。
这是我的部分代码:
class googleAppSpider(scrapy.Spider):
name = "googleApp"
allowed_domains = ['play.google.com']
start_urls = ['https://play.google.com/store/apps/category/GAME/collection/topselling_new_free?authuser=0']
def start_request(self,response):
for i in range(0,10):
yield FormRequest(url="https://play.google.com/store/apps/category/GAME/collection/topselling_new_free?authuser=0", method="POST", formdata={'start':str(i+60),'num':'60','numChildren':'0','ipf':'1','xhr':'1','token':'m1VdlomIcpZYfkJT5dktVuqLw2k:1455483261011'}, callback=self.parse)
def parse(self,response):
links = response.xpath("//a/@href").extract()
crawledLinks = [ ]
LinkPattern = re.compile("^/store/apps/details\?id=.")
for link in links:
if LinkPattern.match(link) and not link in crawledLinks:
crawledLinks.append("http://play.google.com"+link+"#release")
for link in crawledLinks:
yield scrapy.Request(link, callback=self.parse_every_app)
def parse_every_app(self,response):
start_request 似乎在这里没有任何作用。如果我删除它们,蜘蛛仍然会抓取相同数量的链接。
我已经解决了这个问题一个星期...如果您能帮助我,我将不胜感激...
【问题讨论】:
标签: python ajax scrapy web-crawler form-data