详解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分割文件的常用方法
Nov 01 Python
Python简单进程锁代码实例
Apr 27 Python
python WindowsError的错误代码详解
Jul 23 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Python决策树分类算法学习
Dec 22 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
python多线程使用方法实例详解
Dec 30 Python
python yield和Generator函数用法详解
Feb 10 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
解决python3安装pandas出错的问题
May 20 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python logging模块的使用总结
2019/07/09 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Tensorflow 实现释放内存
2020/02/03 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
淘宝店铺营销方案
2014/02/13 职场文书
党建工作先进材料
2014/05/02 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang