“简说Python”,选择“置顶/星标公众号”

福利干货,第一时间送达!

阅读本文大约6分钟,实战学习,老表建议你反复看,反复记,反复练。

//

本文作者

王豪:行路难,多歧路,今安在,埋头苦改bug会有时,直到bug改完才吃饭。

//

1.知识要求

如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下。

2.爬取糗事百科段子实战

目的:爬取前糗事百科前20页的所有段子

(1)首先,我们按照今天头条推文爬取csnd首页的信息的方式,去爬取糗事百科段子相关内容,你会发现运行后程序报错,看错误原因:Remote end closed connection without response远程关闭了链接,导致无法响应。说明,该网站有反爬技术,对方能够识别我们是爬虫,而不是浏览器访问,所以我们要将爬虫伪装成浏览器。

(2)要想伪装成浏览器,首先要获取浏览器用户代理

(3)构造报头,并伪装

#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]

(4)采用get方法来实现网页自动换页,从而爬取前糗事百科前20页的所有段子。通过换页观察不同页的网址,我们发现每页网址都是:https://www.qiushibaike.com/text/page/页码/的形式,通过这我们就能实现自动换页。


#爬取前20网页信息
for i in range(0, 20):#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')

(5)获取正则表达式,观察下面红色方框的内容,发现都是呈<div class="content">.*?<span>(.*?)</span>的形式,所以我们可以构造正则表达式pat="<div class="content">.*?<span>(.*?)</span>",注意.不能匹配换行符,所以,我们要用re.S让其能匹配换行符。


#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)

(6)最终代码入下:

#网络爬虫之爬取糗事百科段子实战
import re
import urllib.request
#糗事百科官网网址
url = "https://www.qiushibaike.com/text/"
#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#爬取前20网页信息
for i in range(0, 20):#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)for d in this_data:print(d.strip())  #字符串的前面和后面有的有换行符,可以用strip()方法去掉字符串首位处的换行符和空格print('--------------------------------------')

(7)运行程序,能够看到网上前20页的段子全被爬下来了,爬取成功!



(8)如果要使程序变得健壮,还可以添加异常处理。代码如下:

#网络爬虫之爬取糗事百科段子实战
import re
import urllib.request
import urllib.error
#糗事百科官网网址
url = "https://www.qiushibaike.com/text/"
#采用浏览器伪装技术,先设置报头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400')
#设置开启工具
opener = urllib.request.build_opener()
#添加报头,将爬虫伪装成浏览器成功
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#爬取前20网页信息
for i in range(0, 20):#异常处理try:#构造每一页的网址this_url = "https://www.qiushibaike.com/text/page/" + str(i+1) + "/"#读取每一页的数据data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')#设置正则表达式pat = '<div class="content">.*?<span>(.*?)</span>'#进行信息提取,因为有换行符,所有要用re.S按.能匹配换行符this_data = re.compile(pat, re.S).findall(data)for d in this_data:print(d.strip())  #字符串的前面和后面有的有换行符,可以用strip()方法去掉字符串首位处的换行符和空格print('--------------------------------------')except urllib.error.HTTPError as e:if hasattr(e, 'code'):print(e.code)if hasattr(e, 'reason'):print(e.reason)

我是老表,踏实的人更容易过好生活,本文完。

推荐阅读:

数据分析从零开始实战

仔细阅读下面四篇文章,快速掌握Python基础知识要点

完整Python基础知识

我是老表,支持我请转发分享本文


/你学Python的态度/

留言 Python666 或 我爱Python,表明你的学习态度。

点个在看,表明态度↓↓↓

Python之爬取糗事百科段子实战相关推荐

  1. 网络爬虫---爬取糗事百科段子实战

    Python网络爬虫 1.知识要求 掌握python基础语法 熟悉urllib模块知识 熟悉get方法 会使用浏览器伪装技术 如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下. 2.爬取糗事 ...

  2. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  3. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  4. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  5. Python爬取糗事百科段子+定时发送QQ邮箱

    文章目录 前言 1. 库导入及介绍 2. 获取网页源码 3. 提取需要的信息 4. 优化输出数据 5. 发送邮件 6. 实现定时发送 7. 源码 前言 学习Python爬虫也有段时间了,总想着搞点事做 ...

  6. Python爬取糗事百科段子

    Python爬取糗事百科段子 Python2.7.15 今天我们来爬取糗事百科的段子 一.获取糗事百科的网页源码 首先,打开浏览器,进入糗事百科,复制它的网址. 然后我们翻个页,可以看到,网址变成了这 ...

  7. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

  8. 爬虫实战1:爬取糗事百科段子

    本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...

  9. Python3写爬虫(五)爬取糗事百科段子

    2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...

最新文章

  1. 优化算法optimization:AdaGrad
  2. 图解VC++6.0和ACE 5.4 开发入门
  3. vue js 定义对象_JS标准内置对象Proxy及Vue中的proxy.js文件
  4. Mybatis bug修正
  5. 如何旋转Android模拟器显示? [重复]
  6. 数字后端基本概念-合集
  7. PYTHON笔记 面向对象程序设计
  8. Ubuntu 18.04修改默认源为国内源
  9. [MATLAB]线性方程组应用--小行星运行轨道计算问题
  10. 光照与渲染(十)- 自发光材质
  11. 自动控制原理9.1---线性系统的状态空间描述(中下)
  12. 大数据分析如何跟踪迁移模式
  13. SOLIDWORKS Routing进阶篇——管道设计技巧分享
  14. oracle驱动下载
  15. 销售战纪——我第一次真正意义上的销售工作
  16. Java图片Base64格式压缩大小至40k之内
  17. while(0),while(1),while(表达式)
  18. 不胜人生一场醉数据库正文 Oracle的逻辑结构(表空间、段、区间、块)——段...
  19. 哪些PCB缺陷适合用X-ray检测技术?
  20. 实现页面的简繁体的切换

热门文章

  1. Java面试精选72题
  2. 小菜鸟的python进阶之路 ------- 匿名函数
  3. web打印控件 LODOP的详细api
  4. 腾讯微服务开源项目再摘信通院OSCAR开源大奖
  5. 常见Java GC Root
  6. 读书笔记:《做出明智判断的10个方法》
  7. 信号与系统 Part 2:傅里叶级数和傅里叶变换(1) 典型周期信号的傅里叶级数推导
  8. linux下实现图像金字塔+Qt5
  9. RESTEasy详解
  10. LIRE原理与源码分析(二)——相关接口