详解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中的XML 工具
Apr 13 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
Python 多线程的实例详解
Sep 07 Python
Python中装饰器高级用法详解
Dec 25 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
python 函数内部修改外部变量的方法
Dec 18 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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核心代码分析require和include的区别
2011/01/02 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
美国羊皮公司:Overland
2018/01/15 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
应届生保险求职信
2013/11/11 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
公务员年度考核评语
2014/12/31 职场文书
晚会开幕词
2015/01/28 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android