爬取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= ?
变化的就是上述两个地方后面的数字,基本上这个数字都是在源代码里可以找得到,也许是时间,也许是编号啥的,但是在这里我也不知道是啥,反正在源代码里搜索之后

Paste_Image.png

再对比抓的包之后就发现了,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.下一步学学模拟登陆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,760评论 4 46
  • 你知道吗,中国平均每年每人吃掉2.59公斤农药!中国的害虫只有20几种,但是中国却有1000多种农药。 我国每年农...
    红强7998阅读 319评论 0 0
  • 从我们出生的那天开始,得与失就一直伴随着我们成长,在家庭,工作,生活各个方方面面中,得与失由我们把握,由我们选择,...
    寒冬里的一支独秀阅读 610评论 0 3