Python爬虫中级(1):网页链接挖掘

概述

  • 在挖掘网站数据时,有时会遇到网页代码爬取下来,但没有所需信息、所需信息需要点击按钮出现、点击“下一页”但网页链接不变而导致不能爬取数据或者只能够爬取第一页数据的情况。
  • 此时有两种较为简单的解决方法,一是使用Selenium进行模拟操作、二是对数据来源进行分析。
  • 因为点击换页按钮加载数据,一定会对后台进行数据请求,故一定会有对某一个链接进行请求。

实例

  • 问题
  1. 以红色狗头网站(其他平台不一定能够使用本章所述方法)某显卡商品页面为例,点击此商品页面后其链接为XXX(此网站主页网址)/100016672406.html
  2. 点击商品评价按钮会加载评论,但链接不变;
  3. 拉到下面点击下一页会出现第二页评论内容,观察网址栏,其中的网址变为XXX(此网站主页网址)/100016672406.html#comment
  4. 之后再点击下一页等翻页操作,并不会改变网页链接,查看翻页按钮的a标签,也并没有具体的链接。
    多个a标签链接一致无有用信息
  • 分析
  1. 网页链接并没有变化,而评论数据进行了加载,故后台应有对隐藏链接的请求;
  2. 按F12打开检查面板并清空内容,点击面板上方的network项,点击评论的第二页,观察请求数据;
    观察数据
  3. 观察上图中的请求数据,数据类型仅三种:gif、script、jpeg,图片类数据并没有作用,猜测JS对评论数据进行了请求,点击查看箭头所指的script文件,按照下图红箭头所指可找到评论数据。
    寻找评论数据
  4. 点击Headers,可找到请求评论的链接XXX(此网站主页网址)/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100016672406&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1,其中page与pageSize参数控制评论页号与每页加载评论条数(≤10)。此时通过改变page的值即可获取各页的评论。

红色狗头网站评论爬虫实例

import requests
import json
import time
import xlwt

def get_comments():
    style = xlwt.XFStyle()
    style.alignment.wrap = 1  # 设置自动换行
    book = xlwt.Workbook(encoding='UTF-8')
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    # 下面的urls列表包含了100条链接,每条链接即一页10条评论,共1000条评论爬取
    urls = ['https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100012015134&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1'.format(str(n)) for n in range(0,100)]
    sheet1 = book.add_sheet('sheet1', cell_overwrite_ok=True)
    num = 0
    for url in urls:
        response = requests.get(url,headers=headers).text
        content = response.replace('fetchJSON_comment98(','').replace(');','')
        data = json.loads(content)
        for c in range(0, 10):
            sheet1.write(c+num, 0, data['comments'][c]['content'], style)
            sheet1.col(0).width = 50000
            print('评论{}:\n'.format(c+num+1) + data['comments'][c]['content'])
        num += 10
        time.sleep(1)
    book.save('D:\某东P40系列手机1000条评论.xls')

get_comments()

总结

  • 本章为简单的暗链寻找与挖掘思路,遇到看似异步加载问题,可先通过检查寻找是否有直接请求的链接,从而避免使用速度较慢的Selenium。
  • 学如逆水行舟,不进则退!
  • (ง •̀-•́)ง
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一北DMY

感谢大大给萌新的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值