Python爬虫时发现一个有趣的现象,请问这是怎么回事?

爬取地址: https://tieba.baidu.com/p/4959928798 在 chrome 上查看源代码,有着一段

  <a class="pb_nameplate j_nameplate j_self_no_nameplate" href="/tbmall/propslist?category=112&ps=24" data-field='{&quot;props_id&quot;:&quot;1120050972&quot;,&quot;end_time&quot;:&quot;1512731564&quot;,&quot;title&quot;:&quot;\u6d77\u8d3c\u738b\u7684\u53f3\u624b&quot;,&quot;optional_word&quot;:[&quot;\u7684&quot;,&quot;\u4e4b&quot;,&quot;\u306e&quot;],&quot;pattern&quot;:[&quot;1&quot;,&quot;1&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;3&quot;]}' target="_blank">海贼王的右手</a>

依据: class="pb_nameplate j_nameplate j_self_no_nameplate

写了一个正则:(?<=pb_nameplate\sj_nameplate\sj_self_nameplate)[\s\S]*?(?=)

运行后发现死活匹配不了,所以

# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import requests

def get_info_from(url): headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36” }

web_data = requests.get(url, headers=headers)
web_data.encoding = 'utf-8'
content = web_data.text

with open('./test.txt', 'w') as f:
    f.write(content)

if name == ‘main’: url = ‘http://tieba.baidu.com/p/4959928798

get_info_from(url)

才发现

<a class="pb_nameplate j_nameplate j_self_nameplate" href="/tbmall/propslist?category=112&ps=24" data-field='{&quot;props_id&quot;:&quot;1120050972&quot;,&quot;end_time&quot;:&quot;1512731564&quot;,&quot;title&quot;:&quot;\u6d77\u8d3c\u738b\u7684\u53f3\u624b&quot;,&quot;optional_word&quot;:[&quot;\u7684&quot;,&quot;\u4e4b&quot;,&quot;\u306e&quot;],&quot;pattern&quot;:[&quot;1&quot;,&quot;1&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;3&quot;]}' target="_blank">海贼王的右手</a>

class="pb_nameplate j_nameplate j_self_no_nameplate 变成了 pb_nameplate j_nameplate j_self_nameplate

这是什么技术,还是我的姿势有问题?


Python爬虫时发现一个有趣的现象,请问这是怎么回事?

13 回复

正则- > 网页解析


(源码的改变或许是因为你从 chrome 里看的和你真实爬到的不一致?)


我无法理解你的问题。

正则- > 网页解析器

对,我爬到的网页代码,和直接在 chrome 查看网页源代码有差异,这个还是第一次遇到

呵呵 我刚试了下 , 应该是你网页登录了, 脚本没有登录。
导出为 curl 命令行,可以对比一下带 cookie 内容跟不带 get 后的内容。

楼主试试把 headers 伪造的完整一点呢,也有可能是 js 动态执行的缘故

你是查看源代码 还是 f12 的检查元素

如果出问题一般都用笨方法,开始的时候先输出爬到的全文,根据爬到的全文做解析,而不是看网页

确实如此,我退出贴吧账号后,再查看源代码,就没有问题!谢谢啦!厉害

嗯嗯,一次一定会注意

原因被 指出了,是登录的问题!
谢谢大家关注

代码不错,会不会跟服务器有关呢?

用 firefox 或者 chrome 的时候记得装个 js 开关。这样你就能看到没有 js 修改 DOM 的界面效果了。

回到顶部