2021-04-20

第二章 动态网页抓取

动态网页:通过AJAX技术,在后台与服务器进行少量的数据交换就可以使网页实现异步更新,这意味着可以在不断重新加载整个网页的情况下对网页的某部分进行更新。一方面减轻了网页重复内容的下载,另一方面节省了流量

解析真实地址抓取

import requests
import json
link = "https://api-zero.livere.com/v1/comments"
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"}
r=requests.get(link,headers=headers)
json_string = r.text      #获取json的string    
json_string = json_string[json_string.find("{"):-2]
#从第一个左大括号提取,最后的两个字符-括号和分号不取
json_data = json.loads(json_string)  #加载字符串,读取字符串
comment_list = json_data["results"]["parents"]  #字典嵌套,例[2][3],第2个元素中的第3个元素
for enchone in comment_list:
    message = eachone["content"]
    print(message)

使用json_string[json_string.find("{"):-2],提取字符串中符合json格式部分,然后使用json.loads 可以把字符串格式的响应体数据转化为json数据,利用json数据的结构,提取到评论的列表comment_list.最后通过一个for循环,提取其中的评论文本,并输出dayin
扩展
json.load 读取文件
json.loads 读取字符串
json.dump 将python转化为json格
使用for循环爬取多个页面的评论,对比两个页面的地址,有两个特别重要的变量,即offset和limit,limit代表的是每一页评论数量的最大值,offset代表的是第几页
so我们可以通过改变offset的值实现换页

import requests
import json
def single_page_comment(link):
    headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"}
    r=requests.get(link,headers=headers)
    json_string = r.text      #获取json的string    
    json_string = json_string[json_string.find("{"):-2]
    #从第一个左大括号提取,最后的两个字符-括号和分号不取
    json_data = json.loads(json_string)  #加载字符串,读取字符串
    comment_list = json_data["results"]["parents"]  #字典嵌套,例[2][3],第2个元素中的第3个元素
    for eachone in comment_list:
    message = eachone["contebt"]
    print(message)
for page in range(1,4):
    link1 = "https://api-zero.livere.com/v1/comments&limit=10&offset="
    link2 = "&repset=38179895656&repsetPath"
    page_str = str(page)
    link = link1 + page_str + link2
    print(link)
    single_page_comment(link)
    
```注:上述地址有问题,不可用
上述代码,single_page_comment(link)是之前爬取一个评论页面的代码,现在放入函数中,方便多次调取。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值