详解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 相关文章推荐
django实现分页的方法
May 26 Python
Python日期的加减等操作的示例
Aug 15 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
使用Python制作一个打字训练小工具
Oct 01 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
Python创建临时文件和文件夹
Aug 05 Python
怎么解决pycharm license Acti的方法
Oct 28 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP 微信支付类 demo
2015/11/30 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python实现二叉堆
2016/02/03 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
武夷山导游词
2015/02/03 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python