百度贴吧针对Xpath的爬虫的反扒策略与解决方式

百度贴吧针对Xpath的爬虫的反扒策略与解决方式

1.下载美剧吧html
打开谷歌浏览器,贴吧中搜索美剧吧,使用ctrl+s的方式保存页面。或打开菜单>更多工具>网页另存为>命名为meiju1.html
2.
找到一个帖子,鼠标右键选择检查
帖子选择
该帖子的标签及代码
使用Xpath helper尝试匹配

# 匹配成功
//div[contains(@class,"threadlist_title pull_left j_th_tit")]

# 取出文本
//div[contains(@class,"threadlist_title pull_left j_th_tit")]/a/text()

成功拿到第一页50个标签
新建一个项目
把meiju1.html和新建的py文件放进根目录

# //div[contains(@class,"threadlist_title pull_left j_th_tit")]/a/text()
import lxml.etree as le
# 以utf-8编码方式打开meiju1.html
with open('meiju1.html', 'r', encoding='utf-8') as f:
    html = f.read()
    html_x = le.HTML(html)
    # 可以看到返回的是一个迭代器对象
    print(html_x)
    title_s = html_x.xpath('//div[contains(@class,"threadlist_title pull_left j_th_tit")]/a/text()/')
    # 可以看到文本是以列表形式存储的
    print(title_s)
    for title in title_s:
    print(title)

但替换成meiju2.html发现不能正常读取,打开meiju2发现里面的内容都被注释掉了,这样我们使用正则表达式
找到之前匹配的xpath语法中要匹配的class标签

threadlist_title pull_left j_th_tit

打开meiju2,ctrl+r把上面的匹配标签复制到里面,可以发现其子标签就是我们要查找的,根据位置编写正则表达式

import re

with open('meiju2.html', 'r', encoding='utf-8') as f:
    # 读取文件并加上换行符
    html = re.sub('\n', '', f.read())
    print(html)
    # 正则表达式
    title_pattern = '<div class="threadlist_title pull_left j_th_tit ">.*?<a.*?>(.*?)</a>'
    title_s = re.findall(title_pattern, html)
    # title_s为列表形式
    print(title_s)
    for title in title_s:
        print(title)

总结:有的网站是在html把关键内容注释阻止xpath读取,我们可以使用正则表达式去读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值