详解Python爬虫爬取博客园问题列表所有的问题


Posted in Python onJanuary 18, 2021

一.准备工作

  • 首先,本文使用的技术为 python+requests+bs4,没有了解过可以先去了解一下。
  • 我们的需求是将博客园问题列表中的所有问题的题目爬取下来。

详解Python爬虫爬取博客园问题列表所有的问题 

二.分析:

  • 首先博客园问题列表页面右键点击检查
  • 通过Element查找问题所对应的属性或标签

详解Python爬虫爬取博客园问题列表所有的问题

可以发现在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+'页爬取成功!')

四.运行结果

运行代码:

详解Python爬虫爬取博客园问题列表所有的问题

详解Python爬虫爬取博客园问题列表所有的问题

到此这篇关于详解Python爬虫爬取博客园问题列表所有的问题的文章就介绍到这了,更多相关Python爬虫爬取列表内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中用keys()方法返回字典键的教程
May 21 Python
python 统计代码行数简单实例
May 04 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
python发送告警邮件脚本
Sep 17 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
用Python 执行cmd命令
Dec 18 Python
python爬虫爬取图片的简单代码
Jan 18 #Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 #Python
java关于string最常出现的面试题整理
Jan 18 #Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
Jan 18 #Python
python中四舍五入的正确打开方式
Jan 18 #Python
PyQt5中QSpinBox计数器的实现
Jan 18 #Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 #Python
You might like
PHP调用三种数据库的方法(3)
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
php微信开发之关注事件
2018/06/14 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python struct.unpack
2008/09/06 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
python opencv进行图像拼接
2020/03/27 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
档案接收函范文
2014/01/10 职场文书
英语商务邀请函范文
2014/01/16 职场文书
市场安全管理制度
2014/01/26 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby
Android 中的类文件和类加载器详情
2022/06/05 Java/Android