python有一个很强大的功能就是爬取网页的信息,这里是CNBlogs 网站,我们将以此网站为实例,爬取指定个页面的大标题内容。代码如下:
首先是导入库:
# 导入所需的库
import requests # 用于发送HTTP请求
from bs4 import BeautifulSoup # 用于解析HTML文档
这一部分是爬取1-50页的列表推导式:
# 生成一个包含要爬取页面URL的列表
# 这里使用了列表推导式,生成了从第1页到第50页的URL(注意:实际可能是分页的URL结构不同,需要调整)
urls = [f'https://www.cnblogs.com/#p{i}' for i in range(1, 51)]
函数部分:分别是爬取页面和爬取页面内容的函数
# 定义爬取页面的函数
def craw(url):
# 使用requests.get()方法发送GET请求
response = requests.get(url)
# 检查HTTP响应状态码是否为200(成功)
if response.status_code == 200:
# 如果请求成功,返回页面内容(文本形式)
return response.text
else:
# 如果请求失败,打印错误信息并返回None
print(f"Failed to retrieve {url}")
return None
# 定义解析页面内容的函数
def parse(html):
# 使用BeautifulSoup解析HTML内容,指定解析器为'html.parser'
soup = BeautifulSoup(html, 'html.parser')
# 查找所有具有'post-item-title'类的<a>标签(这里假设这是文章标题的链接)
# 注意:这里的类名可能需要根据实际页面结构调整
links = soup.find_all('a', class_='post-item-title')
# 使用列表推导式提取每个链接的href属性和文本内容(去除多余空白)
return [(link['href'], link.get_text(strip=True)) for link in links]
主函数部分:
# 主程序入口
if __name__ == '__main__':
# 这里应该遍历urls列表中的每个URL,但为了示例,这里只取了第一个URL(即urls)
# 实际上,您可能想要使用一个循环来处理所有URL
# 注意:下面的代码示例中有个错误,应该使用urls(或其他索引)而不是urls本身
# 正确的做法是:for url in urls: ...
html_content = craw(urls) # 修改为遍历或选择特定URL
# 检查html_content是否为None(即请求是否成功)
if html_content:
# 如果请求成功,解析页面内容并打印结果
for result in parse(html_content):
print(result) # 打印每个文章的链接和标题
结果如下:(爬取第二页数据)
未完待续(持续更新中🏆)