欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网络爬虫(二)之动态网页爬取及使用selenium模块爬取

程序员文章站 2022-04-25 23:09:50
...

网络爬虫(二)之动态网页爬取及使用selenium模块爬取

爬取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模块爬取

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模块爬取

"""
使用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&current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&hide_dates_and_guests_filters=false&place_id=ChIJxWQcnvM1JzQRgKbxoZy75bE&s_tag=vaaWeg7D&section_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)

运行结果:
网络爬虫(二)之动态网页爬取及使用selenium模块爬取