网络爬虫(二)之动态网页爬取及使用selenium模块爬取
程序员文章站
2022-04-25 23:09:50
...
爬取Ajax数据案例(今日头条,某条新闻的评论信息保存成 txt 文档)
"""
使用requests模块爬取动态网页数据:
今日头条,某条新闻的评论信息
"""
import requests
# 这是爬取地址,返回ajax数据
url = "https://www.toutiao.com/api/comment/list/?group_id=6749065854995939854&item_id=6749065854995939854&offset=0&count=15"
# 设置请求头,模拟浏览器去获取数据,所以要带这个请求头,但是一定要使用自己的
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400",
}
# 这是解决日志中有大量 warning 信息
requests.packages.urllib3.disable_warnings()
# 请求,获得响应
response = requests.get(url, headers=headers, verify=False)
if response.status_code == 200:
# 这是将数据文件写到当前目录下
with open("今日头条评论.txt", "w", encoding="UTF-8") as f:
# response.json() 返回为字典
f.write(str(response.json()))
运行结果:
selenium 库爬取数据
简介
selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。
Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及*面测试
如果使用可以更具博客做顶上的流程图接和下面案例来
特别说明:一定要下载和你浏览器对应的webDriver
否则是操作不了浏览器的,并且版本一定要对(这个就自行百度了)
使用selenium爬取今日头条新闻评论
"""
使用selenium爬取今日头条新闻评论
"""
# 从 selenium 到如 webdriver
from selenium import webdriver
import time
# 这里选浏览器一定要大写的
driver = webdriver.Chrome()
# 这是请求地址
driver.get("https://www.toutiao.com/a6747626504986853891/")
# 这就是渲染的浏览器标签
contestDivs = driver.find_elements_by_css_selector("div .c-content")
for contestDiv in contestDivs:
contest = contestDiv.find_element_by_tag_name("p").text
print(contest)
使用selenium爬取今日头条新闻评论 模拟点击事件继续爬
"""
使用selenium爬取今日头条新闻评论 模拟点解时间继续爬
"""
from selenium import webdriver
import time
# 搞无头模式 浏览器不在烦人的弹出了
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options = options)
driver.get("https://www.toutiao.com/a6747626504986853891/")
# 获取"加载更多"超链接
loadMore = driver.find_element_by_css_selector("a.c-load-more")
# 模拟浏览器的点击事件
loadMore.click()
# 等待加载数据
time.sleep(2)
# 获取数据
contentDivs = driver.find_elements_by_css_selector("div.c-content")
for contentDiv in contentDivs:
content = contentDiv.find_element_by_tag_name("p").text
print(content)
综合案例:使用selenium爬取 airbnb房源信息
"""
综合案例:
使用selenium爬取 airbnb房源信息
一个房源所有的信息:_gig1e7 中
名称:div 的class为 _qrfr9x5 中
价格:div 的 class 为 _1ixtnfc 中
类型及大小:span 的 class 为 _faldii7 中
"""
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options = options)
for page in range(18):
print(f"第{page+1}页数据")
driver.get(f"https://www.airbnb.cn/s/长沙/homes?refinement_paths%5B%5D=%2Fhomes¤t_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&hide_dates_and_guests_filters=false&place_id=ChIJxWQcnvM1JzQRgKbxoZy75bE&s_tag=vaaWeg7D§ion_offset=4&items_offset={page*18}&last_search_session_id=7d2afba3-cc47-434c-92be-65bac7643d3b")
# 拿到所有条
houseAll = driver.find_elements_by_css_selector("div._gig1e7")
i = 1
for house in houseAll:
# 名称
name = house.find_element_by_css_selector("div._qrfr9x5").text
# 价格
price = house.find_element_by_css_selector("div._1ixtnfc").text
# 字段去除
newprice = price.replace("价格", "").replace("\n", "")
# 类型及大小
typeSize = house.find_element_by_css_selector("span._faldii7").text
# 分隔一下
type = typeSize.split(" · ")[0]
size = typeSize.split(" · ")[1]
print(f"{i} {name} {newprice} {type} {size}")
# 这里要睡一下,不然会出问题(这是没有优化)
time.sleep(2)
i = i + 1
# 睡一下
time.sleep(5)
运行结果:
下一篇: 爬虫爬取动态网页下载美女图片