使用 Requests 与 Selenium 实现网页数据爬取

文章目录

  • [一、Requests 与 lxml 实现数据爬取](#一、Requests 与 lxml 实现数据爬取)
    • [1 环境准备与基础设置](#1 环境准备与基础设置)
    • [2 网页爬取与数据解析](#2 网页爬取与数据解析)
    • [3 其他爬取示例](#3 其他爬取示例)
  • [二、Selenium 浏览器自动化](#二、Selenium 浏览器自动化)
    • [1 浏览器配置与启动](#1 浏览器配置与启动)
    • [2 网页访问与操作](#2 网页访问与操作)

一、Requests 与 lxml 实现数据爬取

  • 使用 Requests 库直接发送 HTTP 请求,结合 lxml 解析 HTML 内容,实现更高效的数据爬取。

1 环境准备与基础设置

  • 使用之前需要导入必要的库并设置基础环境:
python 复制代码
import fake_useragent
import requests
from lxml import etree
import os
import re

n = 0
def count():
    global n
    n += 1
    return n

if not os.path.exists(r"./Picture"):
    os.mkdir(r"./Picture")
  • 这里定义了一个计数器函数 count(),用于为下载的图片生成序号,同时创建了用于存储图片的目录。

2 网页爬取与数据解析

  • 以下代码展示了如何爬取壁纸网站的图片数据:
python 复制代码
head = {
    "User-Agent": fake_useragent.UserAgent().random
}
for i in range(1, 3):
    url = f"https://10wallpaper.com/List_wallpapers/page/{i}"
    resp = requests.get(url, headers=head)
    result = resp.text
    tree = etree.HTML(result)
    p_list =  tree.xpath("//div[@id='pics-list']/p")
    for p in p_list:
        ima_url = p.xpath("./a/img/@src")[0]
        ima_url1 = "https://10wallpaper.com" + ima_url
        print(ima_url1)
        img_name = count()
        print(img_name)
        img_resp = requests.get(ima_url1, headers=head)
        img_content = img_resp.content
        with open(f"./Picture/{img_name}.jpg","wb") as f:
            f.write(img_resp.content)
  • 代码通过循环遍历多个页面,使用 XPath 定位到图片元素,提取图片链接并下载保存。fake_useragent 库用于生成随机的 User-Agent,帮助避免被网站反爬机制识别。

3 其他爬取示例

  • 爬取虎扑热点话题和豆瓣电影信息示例:
python 复制代码
# 爬取虎扑热点话题
r = requests.get("https://m.hupu.com/hot")
tree = etree.HTML(r.text)
topics = tree.xpath('//div[@class="hot_hot-page-item-title__HL2kw"]/text()')
for i, j in enumerate(topics):
    print(f"热点第{i + 1}话题:{j}")

# 爬取豆瓣电影信息
url = r"https://movie.douban.com/top250"
header = {"User-Agent": fake_useragent.UserAgent().random}
resp = requests.get(url, headers=header)
result = resp.text

with open("doubanFilm1.txt","w",encoding="utf8") as f:
    tree = etree.HTML(result)
    li_list = tree.xpath("//ol[@class='grid_view']/li")
    for li in li_list:
        try:
            film_name = li.xpath("./div/div[2]/div/a/span[1]/text()")[0]
            film_actor = li.xpath("./div/div[2]/div[2]/p[1]/text()")
            film_daoyan = re.match("导演: (.+?) (.+)主演: (.+)", film_actor[0].strip()).group(1)
            film_zhuyan = re.match("导演: (.+?) (.+)主演: (.+)", film_actor[0].strip()).group(3)
            film_year = re.match(".*?(\d+).*", film_actor[1].strip()).group(1)
            film_quote = li.xpath("./div/div[2]/div[2]/p[2]/span/text()")[0]
            film_star = li.xpath("./div/div[2]/div[2]/div/span[2]/text()")[0]
            print(film_name+'#'+film_quote+'#'+film_star+'#'+film_daoyan+'#'+film_zhuyan+'#'+film_year+'\n')
        except Exception as e:
            print(e)
            pass

二、Selenium 浏览器自动化

  • Selenium 是一个强大的工具,可以模拟用户在浏览器中的真实操作,实现自动化测试和数据采集。

1 浏览器配置与启动

  • 使用之前需要配置浏览器驱动。以下代码展示了如何使用 Selenium 配置 Microsoft Edge 浏览器:
python 复制代码
from selenium import webdriver
from selenium.webdriver.edge.options import Options as eo
# from selenium.webdriver.chrome.options import Options as co
import time

edge_options = eo()
# chrome_options = co()

edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
# chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"

driver = webdriver.Edge(options=edge_options)
# driver = webdriver.Chrome(options=chrome_options)
  • 这段代码展示了如何配置两种主流浏览器。这里我们启用了 Edge 浏览器,而 Chrome 浏览器的配置也被包含在内,可以根据需要切换使用。

2 网页访问与操作

  • 启动浏览器后,我们可以访问目标网页并执行相关操作:
python 复制代码
driver.get("https://www.gamewallpapers.com/index.php?start=0&page=")

# 在新标签页中打开其他网页
driver.execute_script("window.open('https://www.bilibili.com/','_blank');")

print(driver.page_source)

time.sleep(10)
  • 通过 driver.get() 方法可以加载指定网页,而 driver.page_source 则能获取当前页面的完整 HTML 源码。这里还演示了如何使用 JavaScript 的 window.open() 方法在新标签页中打开链接,time.sleep(10) 用来来保持浏览器窗口打开10秒,方便观察结果。
相关推荐
火云洞红孩儿3 分钟前
2026年,用PyMe可视化编程重塑Python学习
开发语言·python·学习
2401_841495644 分钟前
【LeetCode刷题】两两交换链表中的节点
数据结构·python·算法·leetcode·链表·指针·迭代法
幻云20105 分钟前
Next.js 之道:从入门到精通
前端·javascript·vue.js·人工智能·python
SunnyDays10118 分钟前
使用 Python 自动查找并高亮 Word 文档中的文本
经验分享·python·高亮word文字·查找word文档中的文字
深蓝电商API13 分钟前
Selenium处理弹窗、警报和验证码识别
爬虫·python·selenium
栗少14 分钟前
英语逻辑词
学习
深蓝电商API18 分钟前
Selenium模拟滚动加载无限下拉页面
爬虫·python·selenium
小王子102423 分钟前
Redis Queue 安装与使用
redis·python·任务队列·rq·redis queue
人工智能AI技术25 分钟前
【Agent从入门到实践】26 使用Chroma搭建本地向量库,实现Agent的短期记忆
人工智能·python
赤狐先生26 分钟前
第三步--根据python基础语法完成一个简单的深度学习模拟
开发语言·python·深度学习