AI网络爬虫:批量爬取豆瓣图书搜索结果

2024-06-10 12:20

本文主要是介绍AI网络爬虫:批量爬取豆瓣图书搜索结果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工作任务:爬取豆瓣图书搜索结果页面的全部图书信息

在ChatGPT中输入提示词:

你是一个Python编程专家,要完成一个爬虫Python脚本编写的任务,具体步骤如下:

用 fake-useragent库设置随机的请求头;

设置chromedriver的路径为:"D:\Program Files\chromedriver125\chromedriver.exe"

隐藏chromedriver特征;

设置selenium的窗口最大化;

请求标头:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Encoding:

gzip, deflate, br, zstd

Accept-Language:

zh-CN,zh;q=0.9,en;q=0.8

Connection:

keep-alive

Host:

http://search.douban.com

Referer:

https://search.douban.com/book/subject_search?search_text=chatgpt&cat=1001&start=0

Sec-Ch-Ua:

"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"

Sec-Ch-Ua-Mobile:

?0

Sec-Ch-Ua-Platform:

"Windows"

Sec-Fetch-Dest:

document

Sec-Fetch-Mode:

navigate

Sec-Fetch-Site:

same-origin

Sec-Fetch-User:

?1

Upgrade-Insecure-Requests:

1

User-Agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

用selenium打开网页:https://search.douban.com/book/subject_search?search_text=chatgpt&cat=1001&start={pagenumber}

{pagenumber}的值从0开始,以15递增,到285结束;

定位xpath=//*[@id="root"]/div/div[2]/div[1]/div[1]/div[{number}]/div/div/div[1]/a的div标签,提取其文本内容({number}的值是从1到15),写入Excel表格第1列;

定位xpath=//*[@id="root"]/div/div[2]/div[1]/div[1]/div[{number}]/div/div/div[3]的div 标签,提取其文本内容({number}的值是从1到15),写入Excel表格第2列;

保存Excel,Excel文件名为:doubanChatGPT20240606.xlsx, 保存到文件夹:F:\AI自媒体内容\AI行业数据分析

注意:

每一步都要输出信息到屏幕

每爬取1条数据,随机暂停5-8秒;

每爬取完1页数据,随机暂停6-12秒;

设置请求头,以应对网站的反爬虫机制;

有些标签的内容可能为空,导致处理时程序报错,遇到为空标签就直接跳过,继续处理下一个标签;

DataFrame.append 方法在 pandas 1.4.0 版本中已经被弃用,并且在后续版本中被移除。为了解决这个问题,我们可以使用 concat 函数来代替 append;

当前使用的是 Selenium 4 或更高版本,executable_path 参数已经被 service 参数替代了;

忽略 SSL 错误:在 Chrome 选项中添加了 --ignore-certificate-errors 和 --ignore-ssl-errors。

增加错误处理,确保尽量多地捕获和处理异常。

在每次请求前更新 User-Agent。

无头模式:使用 --headless 参数在无头模式下运行,以减少干扰。如果需要在前台运行,可以移除此行。

随机暂停:在请求之间随机暂停,以避免反爬虫机制。

源代码:

import time

import random

import pandas as pd

from fake_useragent import UserAgent

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

# 设置chromedriver的路径

chromedriver_path = "D:\\Program Files\\chromedriver125\\chromedriver.exe"

# 创建随机请求头

ua = UserAgent()

# 设置Chrome选项

chrome_options = Options()

chrome_options.add_argument("--start-maximized")

chrome_options.add_argument("--ignore-certificate-errors")

chrome_options.add_argument("--ignore-ssl-errors")

chrome_options.add_argument("--allow-insecure-localhost")

chrome_options.add_argument("--disable-web-security")

chrome_options.add_argument("--disable-site-isolation-trials")

chrome_options.add_argument("--disable-gpu")

chrome_options.add_argument("--no-sandbox")

chrome_options.add_argument("--disable-dev-shm-usage")

chrome_options.add_argument("--headless") # 无头模式运行

# 隐藏chromedriver特征

chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

chrome_options.add_experimental_option('useAutomationExtension', False)

# 初始化webdriver

service = Service(chromedriver_path)

driver = webdriver.Chrome(service=service, options=chrome_options)

# 设置请求头

headers = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",

"Accept-Encoding": "gzip, deflate, br, zstd",

"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",

"Connection": "keep-alive",

"Host": "http://search.douban.com",

"Referer": "https://search.douban.com/book/subject_search?search_text=chatgpt&cat=1001&start=0",

"Sec-Ch-Ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',

"Sec-Ch-Ua-Mobile": "?0",

"Sec-Ch-Ua-Platform": '"Windows"',

"Sec-Fetch-Dest": "document",

"Sec-Fetch-Mode": "navigate",

"Sec-Fetch-Site": "same-origin",

"Sec-Fetch-User": "?1",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

}

# 数据存储列表

data = []

# 爬取网页数据

for pagenumber in range(0, 286, 15):

url = f"https://search.douban.com/book/subject_search?search_text=chatgpt&cat=1001&start={pagenumber}"

print(f"正在爬取页面: {url}")

# 更新 User-Agent

headers["User-Agent"] = ua.random

driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": headers["User-Agent"]})

driver.get(url)

# 随机暂停以防止反爬

time.sleep(random.uniform(6, 12))

for number in range(1, 16):

try:

# 定位书名的div标签

try:

book_title_xpath = f'//*[@id="root"]/div/div[2]/div[1]/div[1]/div[{number}]/div/div/div[1]/a'

book_title = driver.find_element(By.XPATH, book_title_xpath).text

except Exception as e:

book_title = ""

print(f"无法找到书名,错误: {e}")

# 定位描述的div标签

try:

book_desc_xpath = f'//*[@id="root"]/div/div[2]/div[1]/div[1]/div[{number}]/div/div/div[3]'

book_desc = driver.find_element(By.XPATH, book_desc_xpath).text

except Exception as e:

book_desc = ""

print(f"无法找到描述,错误: {e}")

# 添加数据到列表

data.append([book_title, book_desc])

print(f"爬取到数据: {book_title}, {book_desc}")

# 随机暂停以防止反爬

time.sleep(random.uniform(5, 8))

except Exception as e:

print(f"跳过因错误: {e}")

continue

# 将数据写入Excel文件

columns = ["书名", "描述"]

df = pd.DataFrame(data, columns=columns)

output_path = "F:\\AI自媒体内容\\AI行业数据分析\\doubanChatGPT20240606.xlsx"

df.to_excel(output_path, index=False)

print(f"数据已保存到Excel文件:{output_path}")

driver.quit()

这篇关于AI网络爬虫:批量爬取豆瓣图书搜索结果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048149

相关文章

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名