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

2017-03-09 12:09:31 +08:00
 wisefree

爬取地址: 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

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

3406 次点击
所在节点    Python
12 条回复
amustart
2017-03-09 12:31:51 +08:00
正则- > 网页解析


(源码的改变或许是因为你从 chrome 里看的和你真实爬到的不一致?)
amustart
2017-03-09 12:32:28 +08:00
@amustart 正则- > 网页解析器
wisefree
2017-03-09 12:34:15 +08:00
@amustart 对,我爬到的网页代码,和直接在 chrome 查看网页源代码有差异,这个还是第一次遇到
holyzhou
2017-03-09 12:39:08 +08:00
呵呵 我刚试了下 , 应该是你网页登录了, 脚本没有登录。
导出为 curl 命令行,可以对比一下带 cookie 内容跟不带 get 后的内容。
954880786
2017-03-09 12:39:09 +08:00
楼主试试把 headers 伪造的完整一点呢,也有可能是 js 动态执行的缘故
ljcarsenal
2017-03-09 12:40:34 +08:00
你是查看源代码 还是 f12 的检查元素
annielong
2017-03-09 12:45:58 +08:00
如果出问题一般都用笨方法,开始的时候先输出爬到的全文,根据爬到的全文做解析,而不是看网页
wisefree
2017-03-09 12:47:43 +08:00
@holyzhou 确实如此,我退出贴吧账号后,再查看源代码,就没有问题!谢谢啦!厉害
wisefree
2017-03-09 12:48:07 +08:00
@annielong 嗯嗯,一次一定会注意
wisefree
2017-03-09 12:49:02 +08:00
原因被 @holyzhou 指出了,是登录的问题!
谢谢大家关注
QQ2112755791
2017-03-09 13:47:30 +08:00
代码不错,会不会跟服务器有关呢?
ChangHaoWei
2017-03-09 14:26:18 +08:00
用 firefox 或者 chrome 的时候记得装个 js 开关。这样你就能看到没有 js 修改 DOM 的界面效果了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX