Python网络爬虫(第三篇)

一、动态网页的爬取

现在主流网站使用JavaScript展现网页内容,和静态网页不同的是,使用JavaScript时,很多内容并不会出现在HTML源代码中,所以我们需要用到动态网页抓取的技术:1:通过浏览器审查真实网页地址;2使用Selenium模拟浏览器。

异步更新技术——AJAX(Asynchronous Javascript And XML,异步JavaScript和XML):在后台与服务器进行少量数据交换就可以使网页实现异步更新。也就是使整个网页可以不用通过重新加载的情况下对网页的某部分进行更新。它不仅减少了网页的重新下载,也节省了流量,因此AJAX得到广泛使用。使用AJAX网页使得互联网应用程序更小、更快、更友好。

动态网页的实例:评论区的实现,淘宝网店铺的评价(就是你点击某个条目的时候URL没变,但它显示的内容变了)
例如

点击这些栏目他的URL不变,而数字变了

二、分析动态网页

以天猫iPhone12为例
1:定位到该网页,点击累计评价

2:检查页面

该累计评价出现了class=“J_ReviewsCount”,这说明该数据由JavaScript控制的。

三、真实地址抓取

1:找到目标网页——单击鼠标右键——检查——Network——找到真正的文件(json格式的文件)——点击该文件——点击Headers——获得URL——在代码中直接带入该URL。
例如本例:(唐老师的网站)

检查:

2:使用json_string[json_string.find(‘{‘}:-2)],仅仅提取字符串符合json格式的部分。然后,使用json.loads可以把字符串格式的响应体数据转化为json数据,接下来,利用json数据结构,我们可以将数据提取到评论的列表comment_list,最后提取其中的文本并输出。

利用真实地址爬取评价,代码如下:

import requests
import json
link='https://api-zero.livere.com/v1/comments/list?' \'callback=jQuery1124013771440424332337_' \'1608297951950&limit=10&' \'repSeq=4290319&requestPath=%2Fv1%' \'2Fcomments%2Flist&consumerSeq=1020' \'&livereSeq=28583&smartloginSeq=5154&code=&_=1608297951952'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'' AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari''/537.36 Edg/87.0.664.66'}
r=requests.get(url=link,headers=headers)
print(r.status_code)
print(r.text)json_string=r.text
json_string=json_string[json_string.find('{'):-2]#提取字符串符合json格式的部分
json_data=json.loads(json_string)#把提取json格式字符串转换为json数据
coment_list=json_data['results']['parents']#利用json结构存到comment_list#循环输出
for eachone in coment_list:message=eachone['content']print(message)

运行后的结果:

3:在爬取信息时,我们经常需要爬取所有页面,人工一页页地翻页查评论数据的地址会显得很麻烦,所以我们可以通过URL的变化规律去轻松爬取所有评论。
例如小编上一篇中的Top250电影的URL就是根据其规律的变化而更新页面爬取的内容。

四、通过Selenium模拟浏览器抓取
在某些网页中,使用“检查”功能很难找到调用的网页地址,还有某些数据真实地址的URL也十分冗长和复杂,某些网站为了反爬取而对这些地址进行加密。
因此有了这种方法:使用浏览器渲染引擎,直接用浏览器在显示网页时解析HTML、应用CSS样式并执行JavaScript的语句。这种方法在爬虫过程中会打开一个浏览器加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓取下来。(相当于把动态网页变为静态网页)

我们可以用Python的Selenium库模拟浏览器完成抓取。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,浏览器自动按照脚本代码做出单击、输入、打开、验证等操作。

1:Selenium的脚本可以控制浏览器进行操作,可以实现多个浏览器的调用。
此处以IE浏览器为例:
使用Selenium打开浏览器和一个网页。

from selenium import webdriver
driver=webdriver.Ie(executable_path=r'C:\Users\86182\Desktop\IEDriverServer.exe')driver.get('https://image.baidu.com/search/index?''tn=baiduimage&ct=201326592&lm=-1&''cl=2&ie=gb18030&word=%D0%A3%BB%A8&''fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111')

记得自己安装:selenium库和IEDriverServer.exe
IEDriverServer.exe的安装通过driver=webdriver.Ie()该代码运行后报错给出的地址安装符合自己电脑信息的版本即可。

我使用的是Python3.8版本,IE浏览器为X64.


运行之后,他会帮你打开对应网站

2:Selenium的实例
我们将使用Selenium方法获取评论数据。

第一步:找到评论的HTML代码标签,“检查”功能定位到评论标签。

第二步:尝试获取一条评论数据。代码如下:

from selenium import webdriver
driver=webdriver.Ie(executable_path=r'C:\Users\86182\Desktop\IEDriverServer.exe')driver.get('http://www.santostang.com/2018/07/15/4-3-%e9%80%9a%e8%bf%87selenium-%e6%a8%a1%e6%8b%9f%e6%b5%8f%e8%a7%88%e5%99%a8%e6%8a%93%e5%8f%96/')driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='livereAd']"))
comment=driver.find_element_by_css_selector('div.reply-content')
content=comment.find_element_by_tag_name('p')
print(content.text)

运行后会打开对应的网页,并打印评论:“谢谢更新。刚在京东读书买了书,认真学习中。”
Selenium的高级操作
使用Selenium和适应浏览器“检查”的方法爬取动态网页相比,因为Selenium要在整个网页加载出来后才开始爬取内容,速度相对较慢。
因此,实际应用过程的过程中,觉得哪个使用方便就使用哪个。有些方法可以用Selenium控制浏览器加载的内容,从而加快Selenium的爬取速度。常用的方法有:
1:控制CSS的加载
2:控制图片文件的显示
3:控制JavaScript的运行

1:控制CSS:因为抓取过程中仅仅抓取页面的内容,CSS样式文件是用来控制页面的外观和元素的放置位置的,对内容并没有影响,所以我们可以限制网页加载CSS,从而减少抓取的时间。代码如下:

from selenium import webdriverfp=webdriver.FirefoxProfile()#设定不加载css
fp.set_preference('permissions.default.stylesheet',2)
driver=webdriver.Firefox(firefox_profile=fp,executable_path=r'D:\幻想星风\Python\geckodriver.exe')
driver.get('http://www.santostang.com/2018/07/15/4-3-%e9%80%9a%e8%bf%87selenium-%e6%a8%a1%e6%8b%9f%e6%b5%8f%e8%a7%88%e5%99%a8%e6%8a%93%e5%8f%96/')

2:控制CSS的页面:限制图片的加载,如果不需要抓取网页上的图片,最好可以禁止图片的加载,这可以提高爬虫的效率。(图片相对于文字等其他文件内存较大,加载图片的时间较长)代码如下:

from selenium import webdriverfp=webdriver.FirefoxProfile()#设定不加载css
fp.set_preference('permissions.default.img',2)
driver=webdriver.Firefox(firefox_profile=fp,executable_path=r'D:\幻想星风\Python\geckodriver.exe')
driver.get('http://www.santostang.com/2018/07/15/4-3-%e9%80%9a%e8%bf%87selenium-%e6%a8%a1%e6%8b%9f%e6%b5%8f%e8%a7%88%e5%99%a8%e6%8a%93%e5%8f%96/')

关注我(微信公众号搜索:幻想星风),获取更多小技能!

Selenium模拟浏览器相关推荐

  1. python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为

    分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...

  2. python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  3. python 模拟浏览器selenium_浅谈python爬虫使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  4. Python小姿势 - # Python网络爬虫之如何通过selenium模拟浏览器登录微博

    Python网络爬虫之如何通过selenium模拟浏览器登录微博 微博登录接口很混乱,需要我们通过selenium来模拟浏览器登录. 首先我们需要安装selenium,通过pip安装: ``` pip ...

  5. 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)

    请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌曲发行时间.评论条数.评论时间.评论点赞次数.评论内容具体(每一首歌的评论& ...

  6. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  7. Selenium模拟浏览器访问

    目录 一.selenium简介 1.1.什么是selenium 1.2.为什么使用selenium 1.3.安装selenium 1.3.1.谷歌浏览器驱动下载 1.3.2.谷歌驱动和谷歌浏览器版本之 ...

  8. 七、Selenium模拟浏览器

    七.Selenium模拟浏览器 前言 一.Selenium的安装 二.Selenium详情 三.如何下载chromedriver 1.找到你的浏览器版本. 2找到指定网站进行下载 3环境配置 4验证 ...

  9. python 模拟浏览器selenium_从零开始写Python爬虫 --- 3.1 Selenium模拟浏览器

    本来说好要写Mechanize模拟浏览器的,结果一看居然只支持2.x版本的Python,而且已经长久没有更新维护了,本着学新不学旧的原则,我决定跳过他,直接开学Selenium(其实就是我懒,逃 Se ...

  10. 用selenium模拟浏览器登录淘宝识别滑动验证码

    用selenium模拟浏览器登录淘宝,使用账号密码的方式登录淘宝,但是在登录的时候遇到需要滑动验证,使用selenium模拟点击滑块,滑动验证码完成登录. 本文的代码现测可用.做个记录,方便以后查看. ...

最新文章

  1. 044_Properties工具类
  2. 图解观察托管程序线程
  3. linux-epoll研究
  4. php 登录记住密码,php 记住密码自动登录
  5. php faker 中文,使用faker 生成中文测试数据
  6. 行向量,列向量,行主序矩阵,列主序矩阵
  7. (44)FPGA面试题CMOS和TTL电路区别
  8. 支付宝五福活动抢先开始了!原来今年可以提前集
  9. ioc spring技术手册学习
  10. 李笑来登顶 GitHub TOP 榜!币圈大佬要教程序员如何自学编程
  11. cf黑机器多久解除_CF永久解除机器码|CF机器码硬解封详细步骤教程+工具|CF辅助-QQ知啦娱乐网...
  12. c语言中感叹号什么意思_啥是c语言-c语言感叹号用法-c语言中的/和%表示什么意思...
  13. 神奇的口袋【北京大学】
  14. vue简单实现多功能弹幕(比上一个好)
  15. topcoder入门
  16. 阿里-蚂蚁金服社招面经
  17. react使用antd-mobile做自定义替换头像功能
  18. 计算机网络技术实训报告大一,计算机网络技术实训报告.doc
  19. 华为服务器磁盘IO性能查看,企业上云的极速存储挑战,华为云全新极速IO云硬盘性能评测...
  20. RAP2的安装和部署

热门文章

  1. VPS6001 双阶输出线性稳压器 100V 超高压输入推荐介绍
  2. 苹果11是高通基带吗_iphone11是高通基带吗 iPhone11是a13处理器吗
  3. 最能燃起你学习激情的一句话是什么
  4. Verizon CEO称三星是黑马 建议推出自有系统
  5. minty_Brit666‘s python practice no.2
  6. Appium实现Speedtest软件测速自动化
  7. Linux开发在中国
  8. Java 语言实现简易版扫码登录
  9. 用vue+flask做了个音乐播放器(后端部分)
  10. 取得网络中SQL的服务器列表