详解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基类函数的重载与调用实例分析
Jan 12 Python
python实现模拟按键,自动翻页看u17漫画
Mar 17 Python
简单的Python的curses库使用教程
Apr 11 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python反射用法实例简析
Dec 22 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
python操作cfg配置文件方式
Dec 22 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Django DRF认证组件流程实现原理详解
Aug 17 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+javascript液晶时钟
2006/10/09 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
php实现微信发红包功能
2018/07/13 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
如何基于python实现脚本加密
2019/12/28 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
学生个人自我鉴定范文
2014/03/28 职场文书
建房协议书
2014/04/11 职场文书
装修协议书范本
2014/04/21 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js