详解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中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Python之读取TXT文件的方法小结
Apr 27 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
Python画图高斯分布的示例
Jul 10 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
python入门教程之基本算术运算符
Nov 13 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
PHP 实现重载
2021/03/09 PHP
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python使用turtule画五角星的方法
2015/07/09 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
简单了解django文件下载方式
2020/02/10 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
syb养殖创业计划书
2014/01/09 职场文书
结婚典礼证婚词
2014/01/11 职场文书
小学数学国培感言
2014/03/10 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
九年级英语教学反思
2016/02/15 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers