python抓取动态网页(爬取《Python网络爬虫》动态网页抓取的两种技术)

优采云 发布时间: 2021-09-23 18:09

  python抓取动态网页(爬取《Python网络爬虫》动态网页抓取的两种技术)

  由于主流网站,使用JavaScript显示web内容,静态网页的前面简单是不同的。当使用JavaScript,许多内容将不会出现在HTML源代码,但在HTML源位置的JavaScript代码的最后一节,最后给出的数据是由JavaScript提取服务器返回的数据进行渲染。因此,抓取静态网页的技术可能无法正常使用。因此,我们需要由动态网页捕获两种技术:

  1.通过浏览器审查元件解析所述实际网页地址;

  2.使用硒,模拟浏览器。

  我们首先先介绍第一种方法。

  以“Python的网络爬虫:从入门到实践”一书的作者的个人博客作为一个例子。网址:1) “队长”:找到真正的数据地址

  右键单击“检查”,单击“网络”,选择“JS”。刷新页面,选择当页面刷新列出的数据,并选择此JS文件。检查右边的头。如该图所示:

  

  ,其中请求URL是一个真正的数据地址。

  滚动鼠标滚轮在该状态下,找到用户代理。

  

  2)相关的代码:

  import requests

import json

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

link="https://api-zero.livere.com/v1/comments/list?callback=jQuery112405600294326674093_1523687034324&limit=10&offset=2&repSeq=3871836&requestPath=%2Fv1%2Fcomments%2Flist&consumerSeq=1020&livereSeq=28583&smartloginSeq=5154&_=1523687034329"

r=requests.get(link,headers=headers)

# 获取 json 的 string

json_string = r.text

json_string = json_string[json_string.find('{'):-2]

json_data=json.loads(json_string)

comment_list=json_data['results']['parents']

for eachone in comment_list:

message=eachone['content']

print(message)

  输出:

  现在死在了4.2节上,页面评论是有的,但是XHR里没有东西啊,这是什么情况?有解决的大神吗?

为何静态网页抓取不了?

奇怪了,我按照书上的方法来操作,XHR也是空的啊

XHR没有显示任何东西啊。奇怪。

找到原因了

caps["marionette"] = True

作者可以解释一下这句话是干什么的吗

我用的是 pycham IDE,按照作者的写法写的,怎么不行

对火狐版本有要求吗

4.3.1 打开Hello World,代码用的作者的,火狐地址我也设置了,为啥运行没反应

from selenium import webdriver

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

caps = webdriver.DesiredCapabilities().FIREFOX

caps["marionette"] = False

binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')

#把上述地址改成你电脑中Firefox程序的地址

driver = webdriver.Firefox(firefox_binary=binary, capabilities=caps)

driver.get("http://www.santostang.com/2017/03/02/hello-world/")

我是番茄

为什么刷新没有XHR数据,评论明明加载出来了

  代码分析:

  1)对于代Ĵj_string.find()API分辨率:

  Docstring:

S.find(sub[, start[, end]]) -> int

Return the lowest index in S where substring sub is found,

such that sub is contained within S[start:end]. Optional

arguments start and end are interpreted as in slice notation.

Return -1 on failure.

Type: method_descriptor

  所以代码JSON_STRING.FIND( '{')返回 “{” 在json_string串的索引位置。

  2)如果添加代码打印在你的代码json_string,输出的结果是(因为过多的输出内容,只有起点和终点,在关键位置是在红色标记):

  /**/ typeof jQuery112405600294326674093_1523687034324 === 'function' && jQuery112405600294326674093_1523687034324({"results":{"parents":[{"replySeq":33365104,"name":"骨犬","memberId":"B9E06FBF9013D49CADBB5B623E8226C8","memberIcon":"http://q.qlogo.cn/qqapp/101256433/B9E06FBF9013D49CADBB5B623E8226C8/100","memberUrl":"https://qq.com/","memberDomain":"qq","good":0,"bad":0,"police":0,"parentSeq":33365104,"directSeq":0,"shortUrl":null,"title":"Hello world! - 数据科学@唐松

Santos","site":"http://www.santostang.com/2017/03/02/hello-world/","email":null,"ipAddress":"27.210.192.241","isMobile":"0","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.8.3.16721","septSns":null,"targetService":null,"targetUserName":null,"info1":null,"info2":null,"info3":null,"image1":null,"image2":null,"image3":null,"link1":null,"link2":null,"link3":null,"isSecret":0,"isModified":0,"confirm":0,"subCount":1,"regdate":"2018-01-01T06:27:50.000Z","deletedDate":null,"file1":null,"file2":null,"file3":null,"additionalSeq":0,"content":"现在死在了4.2节上,页面评论是有的,但是XHR里没有东西啊,这是什么情况?有解决的大神吗?"

。。。。。。。。。 tent":"我的也是提示火狐版本不匹配,你解决了吗","quotationSeq":null,"quotationContent":null,"consumerSeq":1020,"livereSeq":28583,"repSeq":3871836,"memberGroupSeq":26828779,"memberSeq":27312353,"status":0,"repGroupSeq":0,"adminSeq":25413747,"deleteReason":null,"sticker":0,"version":null}],"quotations":[]},"resultCode":200,"resultMessage":"Okay, livere"});

  从上述输出的输出已知的,我们加入JSON_STRING = JSON_STRING [JSON_STRING.FIND( '{'): - 2]。在您的代码

  如果json_string.find(“{”)不添加,结果是不合法的JSON格式,不能顺利形成JSON文件;如果它不拦截第二比特,结果含有过量);它也无法合法JSON格式。

  3)对于在中间[“内容”]代码comment_list = json_data [“结果”] [“父母”]和消息中的字符串型标签在中间支架,可以是2)关键部件查找,即,由“结果”和“父母”拦截合法JSON文件使用了两个中间支架一步一步的位置,因为我们爬的评论,其内容是在这个JSON文件中的“内容“标签,使用[” 内容“]来的位置。

  据观察,OFFSET在真实数据地址的页面的数量。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线