详解Python爬虫爬取博客园问题列表所有的问题
作者:Winqihe 时间:2021-02-15 02:01:46
一.准备工作
首先,本文使用的技术为 python+requests+bs4,没有了解过可以先去了解一下。
我们的需求是将博客园问题列表中的所有问题的题目爬取下来。
二.分析:
首先博客园问题列表页面右键点击检查
通过Element查找问题所对应的属性或标签
可以发现在div class ="one_entity"中存在页面中分别对应每一个问题
接着div class ="news_item"中h2标签下是我们想要拿到的数据
三.代码实现
首先导入requests和BeautifulSoup
import requests
from bs4 import BeautifulSoup
由于很多网站定义了反爬策略,所以进行伪装一下
headers = {
'User-Agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 87.0.4280.141Safari / 537.36'
}
在这里User-Agent只是其中的一种方式,而且大家的User-Agent可能不同。
爬取数据main代码
url = 'https://q.cnblogs.com/list/unsolved?'
fp = open('blog', 'w', encoding='utf-8')
for page in range(1,26):
page = str(page)
param = {
'page':page
}
page_text = requests.get(url=url,params=param,headers=headers).text
page_soup = BeautifulSoup(page_text,'lxml')
text_list = page_soup.select('.one_entity > .news_item > h2')
for h2 in text_list:
text = h2.a.string
fp.write(text+'\n')
print('第'+page+'页爬取成功!')
注意一下这里,由于我们需要的是多张页面的数据,所以在发送请求的url中我们就要针对不同的页面发送请求,https://q.cnblogs.com/list/unsolved?page=
我们要做的是在发送请求的url时候,根据参数来填充页数page,
代码实现:
url = 'https://q.cnblogs.com/list/unsolved?'
for page in range(1,26):
page = str(page)
param = {
'page':page
}
page_text = requests.get(url=url,params=param,headers=headers).text
将所有的h2数组拿到,进行遍历,通过取出h2中a标签中的文本,并将每取出来的文本写入到文件中,由于要遍历多次,所以保存文件在上面的代码中。
text_list = page_soup.select('.one_entity > .news_item > h2')
for h2 in text_list:
text = h2.a.string
fp.write(text+'\n')
完整代码如下:
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 87.0.4280.141Safari / 537.36'
}
url = 'https://q.cnblogs.com/list/unsolved?'
fp = open('blog', 'w', encoding='utf-8')
for page in range(1,26):
page = str(page)
param = {
'page':page
}
page_text = requests.get(url=url,params=param,headers=headers).text
page_soup = BeautifulSoup(page_text,'lxml')
text_list = page_soup.select('.one_entity > .news_item > h2')
for h2 in text_list:
text = h2.a.string
fp.write(text+'\n')
print('第'+page+'页爬取成功!')
四.运行结果
运行代码:
来源:https://blog.csdn.net/weixin_45462732/article/details/112682565
标签:Python,爬虫,爬取,列表
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
从 msxml6.dll 中获取 DOMDocument 对象的方法与属性
2009-02-22 18:46:00
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2023-07-11 03:55:49
python2.7删除文件夹和删除文件代码实例
2023-06-02 14:41:17
python mac下安装虚拟环境的图文教程
2021-11-02 23:35:21
![](https://img.aspxhome.com/file/2023/2/82942_0s.jpg)
SQL Server 作业的备份(备份作业非备份数据库)
2012-07-11 15:58:49
python中关于xmltodict的使用
2022-11-04 03:03:46
![](https://img.aspxhome.com/file/2023/0/105010_0s.png)
Python 遍历循环详细
2023-04-07 17:20:24
ACCESS如何打印窗体中当前显示的记录
2008-11-20 16:31:00
Python matplotlib 动画绘制详情
2022-04-12 14:36:52
![](https://img.aspxhome.com/file/2023/6/69646_0s.png)
常用Oracle分析函数大全
2023-07-03 08:16:14
![](https://img.aspxhome.com/file/2023/0/63710_0s.jpg)
Python命令启动Web服务器实例详解
2022-10-09 11:53:42
python中Lambda表达式详解
2021-12-06 22:40:26
解决tensorflow添加ptb库的问题
2022-05-28 07:44:02
对Python 多线程统计所有csv文件的行数方法详解
2021-09-09 04:56:44
解决python对齐错误的方法
2023-08-11 05:40:07
![](https://img.aspxhome.com/file/2023/8/98928_0s.jpg)
python实现扫描日志关键字的示例
2023-10-20 15:44:02
![](https://img.aspxhome.com/file/2023/3/84053_0s.jpg)
使用Python的Dataframe取两列时间值相差一年的所有行方法
2023-11-11 06:50:25
Python 在字符串中加入变量的实例讲解
2023-01-27 10:51:21
解决运行出现'dict' object has no attribute 'has_key'问题
2021-06-14 06:58:48
python单测框架之pytest常见用法
2021-05-22 04:13:02
![](https://img.aspxhome.com/file/2023/9/69509_0s.png)