python 爬虫获取书籍名字

本文介绍了一种改进的爬虫技术,用于从豆瓣网站抓取50页书籍信息,解决了因部分书籍副标题缺失而导致的数据错误问题,并分享了爬虫过程中的一些实用技巧。

爬取豆瓣50页书籍的名字

代码如下(这是第一次写的代码,出现了一些问题)

出现爬取不到1000本就停止了

原因使用find_all 若有些书籍若副标题不存在,则会将其他书籍的副标题加在上一本的书籍

解决方法:使用find一个一个检查是否存在副标题 副标题在span标签里 用if语句判断

积累:

1.准确访问标签内的属性可以使用get(“属性值”)获得

如图获取a标签中指定的title属性

2.获取span标签中包含的内容 先用find_all查找上一级标签中包含的span标签,再用for循坏遍历get_text()提取文本内容

3.在终端去除None值 加入判断语句 若爬虫的值为Null则不打印

4.range()函数的使用方法 range(起始值,结束值,每次增加的值) 若结束值为11,则只到了10

改进的代码如下:

 

运行效果:

 

积累:

1.用for循环遍历 打印出来的结果是一个标签一个标签打印的

此时可以用 if语句检验是否存在某标签 如下:

If bs.find_all(a).find(span) is not None:

        .......

Else:

        .......

 

 

 

编写一个使用 Python 获取网页数据的爬虫程序通常包括以下几个关键步骤:环境搭建、发送请求、解析页面内容、数据存储和反爬策略处理。以下是详细的说明和示例代码: ### 环境搭建 在开始之前,需要安装必要的库。最常用的库包括 `requests` 用于发送 HTTP 请求,`BeautifulSoup` 用于解析 HTML 内容,以及 `pandas` 用于数据存储。 ```bash pip install requests beautifulsoup4 pandas openpyxl ``` ### 发送 HTTP 请求 使用 `requests` 库向目标网站发送 GET 请求,并获取网页内容。 ```python import requests url = 'https://example.com' response = requests.get(url) # 检查请求是否成功 if response.status_code == 200: html_content = response.text else: print(f"Failed to retrieve the page. Status code: {response.status_code}") ``` ### 解析 HTML 内容 使用 `BeautifulSoup` 解析 HTML 文档并提取所需的数据。例如,提取所有链接或特定标签的内容。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # 提取所有链接 for link in soup.find_all('a'): print(link.get('href')) # 提取特定标题文本 title_tag = soup.find('h1') if title_tag: print(title_tag.get_text()) ``` ### 数据存储 将提取的数据保存到 Excel 文件中。可以使用 `pandas` 来简化这一过程。 ```python import pandas as pd # 假设我们提取书名和作者信息 data = { 'Book Title': ['Title 1', 'Title 2'], 'Author': ['Author 1', 'Author 2'] } df = pd.DataFrame(data) df.to_excel('books.xlsx', index=False) ``` ### 处理分页与反爬机制 许多网站会限制频繁访问以防止爬虫行为。为了应对这种情况,可以采取以下措施: - **随机延迟**:每次请求之间添加随机等待时间。 - **代理 IP**:使用不同的 IP 地址进行请求,避免被封禁。 - **User-Agent 切换**:模拟不同浏览器的 User-Agent 字符串。 ```python import time import random headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080' } for i in range(1, 6): # 假设有5页数据 url = f'https://example.com/page={i}' response = requests.get(url, headers=headers, proxies=proxies) if response.status_code == 200: # 处理页面内容... pass # 添加随机延迟(1~3秒) time.sleep(random.uniform(1, 3)) ``` ### 完整示例:从网页抓取书籍信息并保存至 Excel 下面是一个完整的例子,演示如何从图书网站抓取书籍名称和作者,并将其保存到 Excel 文件中。 ```python import requests from bs4 import BeautifulSoup import pandas as pd import time import random def fetch_books(page_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(page_url, headers=headers) if response.status_code != 200: print(f"Error fetching {page_url}: {response.status_code}") return [] soup = BeautifulSoup(response.text, 'html.parser') books = [] # 假设每本书的信息在一个 class 为 'book' 的 div 中 for book in soup.find_all('div', class_='book'): title = book.find('h2').get_text(strip=True) author = book.find('p', class_='author').get_text(strip=True) books.append({'Book Title': title, 'Author': author}) return books all_books = [] base_url = 'https://example-books-site.com/page/' for i in range(1, 6): # 抓取前5页 page_url = base_url + str(i) all_books.extend(fetch_books(page_url)) time.sleep(random.uniform(1, 2)) # 防止太快导致被封锁 # 存储到 Excel df = pd.DataFrame(all_books) df.to_excel('scraped_books.xlsx', index=False) ``` 通过以上步骤,就可以创建一个基本但功能齐全的 Python 网络爬虫获取网页上的数据[^1]。这种方法适用于大多数静态网站;对于动态加载的内容,则可能需要考虑使用如 Selenium 或 Scrapy 等更高级的技术[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值