详解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解析中国天气网的天气数据
Mar 21 Python
Python创建系统目录的方法
Mar 11 Python
Python3实现从文件中读取指定行的方法
May 22 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
pandas如何处理缺失值
Jul 31 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 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
PHPCMS的使用小结
2010/09/20 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
取得一定长度的内容,处理中文
2006/12/20 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
jQuery链使用指南
2015/01/20 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
js css自定义分页效果
2017/02/24 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python中lambda与def用法对比实例分析
2015/04/30 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python elasticsearch环境搭建详解
2019/09/02 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
大学毕业生管理学求职信
2014/09/01 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
vue实现在data里引入相对路径
2022/06/05 Vue.js
Django框架中视图的用法
2022/06/10 Python