目标网址:http://product.dangdang.com,我们随便选择一个图书,我这里以唐诗三百首http://product.dangdang.com/1082627885.html为例,推荐使用火狐浏览器,我们鼠标右键-查看元素-点击网络,必备知识,我们按照下图进行分析,寻找数据接口。

上面图片标记的地方就是我们要寻找基本套路,一般都是先清空一下所有的请求数据(左边的小垃圾桶),然后刷新网页,数据很多,我们可以直接按照类型排序,一般都是在json文件中,这样就排除了很多没有用的信息,我们重点看json数据,主要是响应部分,json文件不多,我们一个一个找找看看就可以。

那么我们所需要的评论内容其实就是在这个请求里面了,我们更换到消息头,我们找到请求头的信息

http://product.dangdang.com/index.php?r=comment%2Flist&productId=1082627885&categoryPath=01.41.45.11.00.00&mainProductId=1082627885&mediumId=0&pageIndex=1&sortType=1&filterType=1&isSystem=1&tagId=0&tagFilterCount=0&template=publish

我们在浏览器打开这个网址,返回的就是json文件,里面包含了我们想要的评论。特别注意pageIndex参数,这个就是构造翻页的,这个都是自己摸索尝试的,别问你怎么上来就说pageIndex,我们去掉后面的参数,修改pageIndex=2,就实现了翻页的操作,哈哈,分析就此结束,然后就是写代码了。

import requests,json
from lxml import etree

for i in range(1,7):
    url='http://product.dangdang.com/index.php?r=comment%2Flist&productId=1082627885&categoryPath=01.41.45.11.00.00&mainProductId=1082627885&mediumId=0&pageIndex={0}'.format(i)
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
    }
    response=requests.get(url,headers=headers)
    # print(type(response.text))
    # print(response.text)
    result=json.loads(response.content)  #这里一般都需要把json转换为字典dict,方便我们取值
    # print(type(result))
    # print(result) #会发现都是嵌套的字典dict,便于我们提取想要的数据
    comment_html=result['data']['list']['html'] #找到html,它里面包含我们想要的所有信息
    #print(comment_html)
    #xpath解析数据
    tree=etree.HTML(comment_html)
    comments=tree.xpath('//div[@class="item_wrap"]')
    #print(comments)
    for i in comments:
        comment_data=i.xpath('./div[@class="comment_items clearfix"]/div[1]/div[@class="describe_detail"]/span/text()')[0]
        comment_time=i.xpath('./div[@class="comment_items clearfix"]/div[1]/div[@class="starline clearfix"]/span[1]/text()')[0]
        print(comment_time,comment_data)

xpath分析按照评论的源代码分析,刚开始尽量写的细致一点,先抓大,再抓小的。

发表评论

后才能评论