详解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编写脚本获取手机当前应用apk的信息
Jul 21 Python
调试Python程序代码的几种方法总结
Apr 28 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
python 提取key 为中文的json 串方法
Dec 31 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 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
超级简单的发送邮件程序
2006/10/09 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
python 获取网页编码方式实现代码
2017/03/11 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
优秀员工演讲稿
2014/05/19 职场文书
求职信范文大全
2014/05/26 职场文书
学生安全责任书模板
2014/07/25 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
python异步的ASGI与Fast Api实现
2021/07/16 Python