详解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 12 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
python解析xml文件实例分析
May 27 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
python小白学习包管理器pip安装
Jun 09 Python
在keras中实现查看其训练loss值
Jun 16 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
如何用python插入独创性声明
Mar 31 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
python非标准时间的转换
Jul 25 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
自动分页的不完整解决方案
2007/01/12 PHP
php中spl_autoload详解
2014/10/17 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python返回数组/List长度的实例
2018/06/23 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
20行python代码实现人脸识别
2019/05/05 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
学习和使用python的13个理由
2019/07/30 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
pandas实现导出数据的四种方式
2020/12/13 Python
linux面试题参考答案(11)
2012/05/01 面试题
应届医学毕业生求职信分享
2013/12/02 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
教师岗位职责范本
2013/12/29 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
法定代表人资格证明书
2014/09/11 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
工作年限证明范本
2015/06/15 职场文书
单位工作证明范本
2015/06/15 职场文书
高一军训感想
2015/08/07 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
公证书
2019/04/17 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python