import requests
from bs4 import BeautifulSoup
urls = [f'https://www.cnblogs.com/#p{i}' for i in range(1,51)]
def craw(url):
r = requests.get(url)
return r.text
def parse(html):
soup = BeautifulSoup(html,"html.parser")
links = soup.find_all("a",class_="post-item-title")
return [(link['href'],link.get_text()) for link in links]
if __name__ == '__main__':
for result in parse(craw(urls[2])):
print(result)
这段代码是一个简单的网络爬虫,主要目的是从博客园网站(https://www.cnblogs.com
)的页面中抓取博客标题和对应的链接。以下是对代码的详细分析:
1. URL 构造
urls = [f'https://www.cnblogs.com/#p{i}' for i in range(1, 51)]
使用列表推导式生成了一个包含 1 至 50 页博客列表的 URL。
每个 URL 的格式为 https://www.cnblogs.com/#p{i},如
第 1 页:https://www.cnblogs.com/#p1
第 2 页:https://www.cnblogs.com/#p2
...
第 50 页:https://www.cnblogs.com/#p50
2. 爬取网页内容:craw
函数
def craw(url):
r = requests.get(url)
return r.text
接收一个 URL,使用 requests.get 向服务器发送 HTTP GET 请求。 返回值是网页的 HTML 内容(字符串形式)。
3. 解析 HTML 内容:parse
函数
def parse(html):
soup = BeautifulSoup(html, "html.parser")
links = soup.find_all("a", class_="post-item-title")
return [(link['href'], link.get_text()) for link in links]
输入:接收 HTML 内容。
功能: 使用 BeautifulSoup 将 HTML 字符串解析为可操作的 DOM 对象。 查找所有 <a> 标签,且 class 属性为 post-item-title。 从每个符合条件的 <a> 标签中提取 href和链接文本。
输出:返回一个包含链接和标题的元组列表。例如:
4. 主程序
if __name__ == '__main__':
for result in parse(craw(urls[2])):
print(result)
从 urls[2](即第三页)开始爬取博客列表。
将 craw 获取的 HTML 内容传递给 parse,解析博客链接和标题。
将解析结果逐行打印。