详解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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
python实现斐波那契递归函数的方法
Sep 08 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python中%r和%s的详解及区别
Mar 16 Python
基于Python闭包及其作用域详解
Aug 28 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
用PHP实现验证码功能
2006/10/09 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
写出高质量的PHP程序
2012/02/04 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
javascript第一课
2007/02/27 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python深入学习之内存管理
2014/08/31 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
Django中template for如何使用方法
2021/01/31 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
毕业生的自我评价分享
2013/12/18 职场文书
法学院方阵解说词
2014/01/29 职场文书
经典导游欢迎词
2015/01/26 职场文书
政审证明材料
2015/06/19 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python