requests+bs4爬取网页内容

您所在的位置:网站首页 pdf设置安全性不能提取页面内容 requests+bs4爬取网页内容

requests+bs4爬取网页内容

2024-06-28 19:37| 来源: 网络整理| 查看: 265

一、引言

目标网址:https://gary666.com/learn

爬取方式:requests+bs4

难度:易

基本爬取的内容: 在这里插入图片描述

输出:页面中所有的文章的标题、内容、作者、文章分类、时间 对应上图(标题为win10python安装配置selenium 、作者是Gary、文章分类python、时间2020-7-9)

选做内容:

数据存储:txt、excel、数据库(mysql、sqlite等)翻页:https://gary666.com/learn?page=2,url示例,获取所有页的文章的标题、内容、作者、类型、时间(循环实现)优化代码(设置浏览器头部信息;封装爬取函数、解析函数,即涉及requests的封装一个函数,涉及bs4的封装一个函数,提高代码的可扩展性、方便复用;完善注释) 二、网页分析

对网页进行分析,是进行网页爬虫的重要步骤之一。(此处不会具体讲解网页分析的过程,具体可参照https://blog.csdn.net/twk121109281/article/details/90401671) 1.获取url:通过观察页面获取url地址的规律以及总的页码数:构造url地址的列表。首先我们观察每一个页面的url地址的区别,发现它有以page=“页面数”这样的规律。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 于是我们可以根据这个规律进行对网页进行循环:

for i in range(1,10):

2.接着就是发送请求,获取响应 发送请求需要我们使用requests模块,可以用下面的代码进行:

#请求网页内容 def request(num): # 设置浏览器头部信息 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36' } url = 'https://gary666.com/learn?page='+str(num) # 需要请求的网页的链接 html = requests.get(url,headers=headers) # get方式请求数据 # print(html.status_code) # 查看请求的状态码(200表示请求正常) html.encoding = html.apparent_encoding # 设置编码,防止由于编码问题导致文字错乱 # print(html.text) # 查看请求到的内容 content = html.text return content

3.跟着就是提取所有文章数据 提取数据需要我们使用BeautifulSoup模块。 我们通过审查元素可以看到每一个文章模块就是一个div标签. 在这里插入图片描述 提取所有文章数据可以用下面代码进行:

# 解析需要的内容 # 解析器自带的是html.parser,也可以用lxml,兼容性更好,不过要单独安装第三方库 def soup(content): soup = BeautifulSoup(content, "html.parser") # 获取所有的文章信息 div_list = soup.find_all("div",class_="blogs") # 注意: 若属性名是 class 则需要在后面加个下划线,写成 class_ return div_list

4.然后提取单个文章的所有信息 我们下面以一篇文章的标题为例,提取信息(注:我使用的是火狐浏览器)。 在这里插入图片描述 在这里插入图片描述文章的标题在标签内 于是我们用下列代码提取文章的标题:

div.find("h3").string

5.最后保存数据 我们将爬取的文章数据保存到txt文件中,如下面代码所示:

f = open("requests+bs4.txt", "w") for i in range(1,10): content=request(i) div_list=soup(content) for div in div_list: # 循环查看每个文章的信息并存储到txt文件中 f.write( "******************************************************************************************************\n") f.write("篇名: " + div.find("h3").string + "\n") f.write("作者: " + div.find("li", class_="author").string + "\n") f.write("类别: " + div.find("li", class_="lmname").string + "\n") f.write("时间: " + div.find("li", class_="timer").string + "\n") f.write("内容: " + div.find("p").string + "\n") f.close() 三、完整代码 ######################################################################################################################## # -*- coding: utf-8 -*- # author:lyq ######################################################################################################################## # 导入需要用到的库 import requests from bs4 import BeautifulSoup #请求网页内容 def request(num): # 设置浏览器头部信息 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36' } url = 'https://gary666.com/learn?page='+str(num) # 需要请求的网页的链接 html = requests.get(url,headers=headers) # get方式请求数据 # print(html.status_code) # 查看请求的状态码(200表示请求正常) html.encoding = html.apparent_encoding # 设置编码,防止由于编码问题导致文字错乱 # print(html.text) # 查看请求到的内容 content = html.text return content # 解析需要的内容 # 解析器自带的是html.parser,也可以用lxml,兼容性更好,不过要单独安装第三方库 def soup(content): soup = BeautifulSoup(content, "html.parser") # 获取所有的文章信息 div_list = soup.find_all("div",class_="blogs") # 注意: 若属性名是 class 则需要在后面加个下划线,写成 class_ return div_list if __name__ == '__main__': f = open("requests+bs4.txt", "w") for i in range(1,10): content=request(i) div_list=soup(content) for div in div_list: # 循环查看每个文章的信息并存储到txt文件中 f.write( "******************************************************************************************************\n") f.write("篇名: " + div.find("h3").string + "\n") f.write("作者: " + div.find("li", class_="author").string + "\n") f.write("类别: " + div.find("li", class_="lmname").string + "\n") f.write("时间: " + div.find("li", class_="timer").string + "\n") f.write("内容: " + div.find("p").string + "\n") f.close() 四、执行结果在这里插入图片描述


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3