python网络爬虫-动态网页抓取(五)
动态抓取的实例
在开始爬虫之前,我们需要了解一下Ajax(异步请求)。它的价值在于在与后台进行少量的数据交换就可以使网页实现异步更新。
如果使用Ajax加载的动态网页抓取,有两种方法:
- 通过浏览器审查元素解析地址。
- 通过Selenium模拟浏览器抓取。
解析真实地址抓取
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10、.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
for e in range(1, 11):
# 要请求的数据地址
link = """
https://api-zero.livere.com/v1/comments/list?callback=jQuery112400364209957301318_1640670329077&limit=10&offset=""" + str(
e) + """&repSeq=4272904&requestPath=%2Fv1%2Fcomments%2Flist&consumerSeq=1020&livereSeq=28583&smartloginSeq=5154&code=&_=1640670329079
"""
# 加入请求头,发送请求
r = requests.get(link, headers=headers)
# 请求响应的内容
json_string = r.text
# 找到响应内容中的字符格式JSON数据
json_string = json_string[json_string.find('{'):-2]
# 把字符格式的响应数据转化为json数据
json_data = json.loads(json_string)
comment_list = json_data['results']['parents']
i = 0
for eachone in comment_list:
message = eachone['content']
i += 1
print(i)
print(message)
通过selenium模拟浏览器抓取:使用浏览器渲染的方式将爬取的动态网页变成静态网页
selenium安装
pip install selenium
fp = webdriver.FirefoxOptions()
fp.set_preference("permissions.default.stylesheet", 2)
# 打开浏览器
# driver = webdriver.Firefox(firefox_profile=fp, executable_path=r'C:\Program Files\Mozilla Firefox\firefox.exe')
driver = webdriver.Firefox(options=fp)
# 输入打开网址
driver.get("http://www.santostang.com/2018/07/04/hello-world/")
需要下载一个浏览器驱动器
下载chromedriver地址:http://chromedriver.storage.googleapis.com/index.html
下载geckodriver地址:https://github.com/mozilla/geckodriver/releases
selenium获取文章的所有评论
from selenium import webdriver # 模拟浏览器抓取
fp = webdriver.FirefoxOptions()
fp = webdriver.ChromeOptions()
# fp.set_preference("permissions.default.stylesheet", 2)
fp.set_capability("permissions.default.stylesheet", 2)
# 打开浏览器
# driver = webdriver.Firefox(firefox_profile=fp, executable_path=r'C:\Program Files\Mozilla Firefox\firefox.exe')
# driver = webdriver.Firefox(options=fp)
driver = webdriver.Chrome(options=fp)
# 输入打开网址
driver.get("http://www.santostang.com/2018/07/04/hello-world/")
# # 切换到ifrom
# driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='livere-comment']"))
# # 通过class选择器的方式查找
# comment = driver.find_element_by_css_selector('div.reply-content')
# # 通过标签选择器查找
# content = comment.find_element_by_tag_name('p')
# selenium选择元素的方法
# find_element_by_id:通过元素的id选择,例如:driver.find_element_by_id(‘loginForm’)
# find_element_by_name:通过元素的name选择,driver.find_element_by_name(‘password’)
# find_element_by_xpath:通过xpath选择,driver.find_element_by_xpath(“ // form[1]”)
# find_element_by_link_text:通过链接地址选择
# find_element_by_partial_link_text:通过链接的部分地址选择
# find_element_by_tag_name:通过元素的名称选择
# find_element_by_class_name:通过元素的class选择
# find_element_by_css_selector:通过css选择器选择
# 需要查找多个元素,就是在上述的element后加上s,变成elements。xpath和css_selector是比较好的方法
# 常见的操作元素方法
# clear 清除元素的内容
# – send_keys 模拟按键输入
# – click 点击元素
# – submit 提交表单
# 执行JS脚本 滑倒底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='livere-comment']"))
time.sleep(1)
for i in range(0, 3):
load_more = driver.find_element_by_css_selector('button.page-last-btn')
load_more.click()
# driver.switch_to.default_content()
time.sleep(1)
# driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='livere-comment']"))
comments = driver.find_elements_by_css_selector('div.reply-content')
for cm in comments:
content = cm.find_element_by_tag_name('p')
print(content.text)
selenium优化操作
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import random
options = Options()
num = str(float(random.randint(500, 600)))
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/{}"
" (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/{}".format(num, num))
# 禁止图片和css加载
prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path='E:\\DownLoad\\python\\Scripts\\chromedriver.exe', chrome_options=options)
driver.get('https://www.ly.com/')
time.sleep(5)
html = driver.find_element_by_xpath("//body").get_attribute("innerHTML")
print(html)
selenium爬虫时间:深圳短租数据
option = webdriver.FirefoxOptions()
option.set_preference('permissions.default.image', 2)
option.set_preference('permissions.default.stylesheet', 2)
firefox = webdriver.Firefox(options=option)
firefox.set_page_load_timeout(5)
firefox.set_script_timeout(5)
try:
firefox.get(
"https://www.airbnb.cn/s/%E9%9D%92%E5%B2%9B/homes?host_promotion_type_ids[]=0&host_promotion_type_ids[]=1&host_promotion_type_ids[]=8&checkin=2021-12-30&checkout=2021-12-31")
divs = firefox.find_elements_by_css_selector("div._8ssblpx")
for div in divs:
# 价格 评价数 名称 房屋种类 床数量 房客数量
str_fangwu = div.find_element_by_css_selector("span._faldii7")
str_fangwu = str_fangwu.text
jg = div.find_element_by_css_selector("span._185kh56")
jg = jg.text
pjs = div.find_element_by_css_selector("span._1clmxfj")
pjs = pjs.text
name = div.find_element_by_css_selector("div._qrfr9x5")
name = name.text
print(str_fangwu, jg, pjs, name)
except Exception as e:
pass
python网络爬虫-动态网页抓取(五)的更多相关文章
- python网络爬虫-静态网页抓取(四)
静态网页抓取 在网站设计中,纯HTML格式的网页通常被称之为静态网页,在网络爬虫中静态网页的数据比较容易抓取,因为说有的数据都呈现在网页的HTML代码中.相对而言使用Ajax动态加载的玩个的数据不一定 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构
百度的搜索引擎有反爬虫机制,我先直接用guzzle试试水.代码如下: <?php /** * Created by Benjiemin * Date: 2020/3/5 * Time: 14:5 ...
- Python网络爬虫与如何爬取段子的项目实例
一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...
- 爬虫 - 动态分页抓取 游民星空 的资讯 - bs4
# coding=utf-8 # !/usr/bin/env python ''' author: dangxusheng desc : 动态分页抓取 游民星空 的资讯 date : 2018-08- ...
- Python实现简单的网页抓取
现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...
- Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识
网站站点的背景调研 1. 检查 robots.txt 网站都会定义robots.txt 文件,这个文件就是给 网络爬虫 来了解爬取该网站时存在哪些限制.当然了,这个限制仅仅只是一个建议,你可以遵守,也 ...
- 面向初学者的Python爬虫程序教程之动态网页抓取
目的是对所有注释进行爬网. 下面列出了已爬网链接.如果您使用AJAX加载动态网页,则有两种方式对其进行爬网. 分别介绍了两种方法:(如果对代码有任何疑问,请提出改进建议)解析真实地址爬网示例是参考链接 ...
随机推荐
- MyEclipse编写jsp很卡的修改方法 (转载)
原文来源 Post IP : 180.156.210.* 1,改默认编辑模式就可以了.将默认编辑器由"myeclipse visual jsp designer" ...
- [炼丹术]yolact训练模型学习总结
yolact训练模型学习总结 一.YOLACT介绍(You Only Look At CoefficienTs) 1.1 简要介绍 yolact是一种用于实时实例分割的简单.全卷积模型. (A sim ...
- 使用.NET 6开发TodoList应用(14)——实现查询过滤
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在查询请求中,还有一类常见的场景是过滤查询,也就是有限制条件的查询,落在数据库层面就是常用的Where查询子句.实现起来也很简 ...
- Java程序设计基础笔记 • 【第3章 运算符与表达式】
全部章节 >>>> 本章目录 3.1 运算符(一) 3.1.1 赋值运算符 3.1.2 算数运算符 3.1.3 复合运算符 3.1.4 实践练习(一) 3.1.5 实践练习 ...
- JQuery的安装与下载教程
网页中添加 jQuery 可以通过多种方法在网页中添加 jQuery. 您可以使用以下方法: 从 jquery.com 下载 jQuery 库 从 CDN 中载入 jQuery, 如从 Google ...
- nodejs创建一个简单的web服务
这是一个突如其来的想法,毕竟做web服务的框架那么多,为什么要选择nodejs,因为玩前端时,偶尔想调用接口获取数据,而不想关注业务逻辑,只是想获取数据,使用java或者.net每次修改更新后还要打包 ...
- Count Sequences
\(考虑问题的转换,即把用n个球,分为r-l+2个部分,其中第1部分表示该区域的球值为l,第二部分表示该区域的球值为l+1\) \(......第r-l+2部分为不选该区域的球\) \(该问题等价于在 ...
- JMeter_请求参数
在做接口测试时,发送请求的参数有两种格式,一种是Parameters,一种是JSON 一.Jmeter传参 JMeter 传Parameters格式的参数 JMeter 传JSON格式的参数 二.区分 ...
- Flask_路由(二)
一.路由规则设置说明 flask框架使用route()装饰器配置路由. from flask import Flask app = Flask(__name__) @app.route("/ ...
- Linux下校验SHA1和MD5的方法
当我们从互联网下载东西或者从U盘拷贝东西的时候,通常是不会和源文件有什么区别的,但是在偶然的情况下会出现下载或者拷贝出错的情况, 尤其是在下载大文件的时候,比如系统光盘......当你装机到一半才发现 ...