爬取trip advisor英文评论(二)
书接上文,http://www.jianshu.com/p/331c25b86938,
在抓包之后找到了评论的真实网址,接下来就是将真实网址构造出来然后交给解析函数来爬取了。
首先看一下真实的网址,跟后面的网页比较之后发现主要变化的就是两个地方
http://www.tripadvisor.cn/ExpandedUserReviews-g303685-d550738?target=415647093&context=1&reviews=415647093,414284826,413404545,413197151,412897038,412421700,412353818,411970335,411775304,411196496&servlet=Attraction_Review&expand=1
(1)target=?
(2)reviews= ?
变化的就是上述两个地方后面的数字,基本上这个数字都是在源代码里可以找得到,也许是时间,也许是编号啥的,但是在这里我也不知道是啥,反正在源代码里搜索之后
再对比抓的包之后就发现了,target后面的接的是第一个数字,reviews后面跟的是所有的所有的数字。明白这里就好办了。
我明白了 num1 = selector.xpath('//div[@class="col balance "]/div/div[@class="reviewSelector track_back"]/@id')
num2 = selector.xpath('//div[@class="col balance "]/div/div[@class="reviewSelector "]/@id')
将所有取出之后格式如上图所示,再用正则表达式将数字匹配出来
a=''.join(re.findall('\d+',str(info1)))
b=','.join(re.findall('\d+',''.join(info2)))
a就是target后面的所根的数字,b就是reviews后面所根的数字了。
接下来的就简单了,将真实函数构造出来之后再以同样的方式解析出来,然后根据老套路选出要爬取的文字就好了。
这次的爬虫没有在scrapy框架下写的,因为想要理清思路,此外,还没搞明白如何在scrapy中添加cookies信息,按照网上的要么在setting中添加,要么在spider的框架中添加,但是都不行,有哪位知道的,烦请在下面指教一下。
照例附上代码:
import requests
from lxml import etree
import re
import time
def get_comment(url):
time.sleep(5)
headers = {'cookies信息' }
html=requests.post(url,headers=headers).content #解析网页中的网址
selector=etree.HTML(html)
info1 = selector.xpath('//div[@class="col balance "]/div/div[@class="reviewSelector track_back"]/@id')
info2 = selector.xpath('//div[@class="col balance "]/div/div[@class="reviewSelector "]/@id')
a=''.join(re.findall('\d+',str(info1))) #target后面的数字
b=','.join(re.findall('\d+',''.join(info2))) #reviews后面的数字
real_url= 'http://www.tripadvisor.cn/ExpandedUserReviews-g303685-d550738?target={}&context=1&reviews={},{}&servlet=Attraction_Review&expand=1'.format(a,a,b) #构造出真实网址
print(real_url)
html=requests.post(real_url,headers=headers).content
selector=etree.HTML(html)
coms = selector.xpath('//div[@class="entry"]/p/text()')
print(''.join(coms)) #在网页中评论会有分行,输出的会是列表,所以要统一一下
if __name__=='__main__': #构造所有网页网址
start_url=['http://www.tripadvisor.cn/Attraction_Review-g303685-d550738-Reviews-Mt_Huangshan_Yellow_Mountain-Huangshan_Anhui.html/BackUrl#REVIEWS']
for i in range(10,1960,10):
next_url='http://www.tripadvisor.cn/Attraction_Review-g303685-d550738-Reviews-or%s-Mt_Huangshan_Yellow_Mountain-Huangshan_Anhui.html/BackUrl#REVIEWS'%i
start_url.append(next_url)
for url in start_url:
get_comment(url)
总结:
1.这类网站的难点在于抓包,除了自己找以外,还有flidder等工具,可以研究研究
2.如何将框架理顺,加入到scrapy中
3.下一步学学模拟登陆