详解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中的is和id用法分析
Jan 26 Python
python开发之文件操作用法实例
Nov 13 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
pytorch 模型可视化的例子
Aug 17 Python
python做接口测试的必要性
Nov 20 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
Python使用scapy模块发包收包
May 07 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
json的使用小结
2016/06/08 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
多版本Python共存的配置方法
2017/05/22 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python图像常规操作
2017/11/11 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
家具促销活动方案
2014/02/16 职场文书
喝酒检查书范文
2014/02/23 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android