我正在尝试抓取使用 javascript 生成的社交点赞计数。如果我绝对引用 XHR url,我就能够抓取所需的数据。但是我尝试抓取的网站动态生成这些 XMLHttpRequest,其中包含我不知道如何提取的查询字符串参数。
例如,您可以看到使用每个页面特有的 m、p、i 和 g 参数来构造请求 url。
这是组装好的网址:
..返回此 JSON:
{"twitter":13325,"facebook":23481,"googleplusone":964,"disqus":272}
使用以下脚本,我可以从我刚才提到的请求 URL 中提取所需的数据(在本例中为 Twitter 计数),但仅限于该特定页面。
import scrapy
from aeon.items import AeonItem
import json
from scrapy.http.request import Request
class AeonSpider(scrapy.Spider):
name = "aeon"
allowed_domains = ["aeon.co"]
start_urls = [
"http://aeon.co/magazine/technology"
]
def parse(self, response):
items = []
for sel in response.xpath('//*[@id="latestPosts"]/div/div/div'):
item = AeonItem()
item['title'] = sel.xpath('./a/p[1]/text()').extract()
item['primary_url'] = sel.xpath('./a/@href').extract()
item['word_count'] = sel.xpath('./a/div/span[2]/text()').extract()
for each in item['primary_url']:
yield Request(http://aeon.co/magazine/social/social.php?url=http://aeon.co/magazine/technology/the-elon-musk-interview-on-mars/&m=1385983411&p=1412056831&i=25829&g=http://aeon.co/magazine/?p=25829, callback=self.parse_XHR_data,meta={'item':item})
def XHR_data(self, response):
jsonresponse = json.loads(response.body_as_unicode())
item = response.meta['item']
item["tw_count"] = jsonresponse["twitter"]
yield item
所以我的问题是,如何提取 m、p、i 和 g url 查询参数,以便我可以动态模拟请求 url? (而不是如上所示绝对引用它)
您可以通过以下方式提取您的网址:
import urlparse
url = 'http://aeon.co/magazine/social/social.php?url=http://aeon.co/magazine/technology/the-elon-musk-interview-on-mars/&m=1385983411&p=1412056831&i=25829&g=http://aeon.co/magazine/?p=25829'
parsed_url = urlparse.parse_qs(urlparse.urlparse(url).query)
for p in parsed_url:
print p + '=' + parsed_url[p][0]
和输出:
>> python test.py
url=http://aeon.co/magazine/technology/the-elon-musk-interview-on-mars/
p=1412056831
m=1385983411
i=25829
g=http://aeon.co/magazine/?p=25829
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)