Python网络爬虫

1.知识要求

  • 掌握python基础语法
  • 熟悉urllib模块知识
  • 熟悉get方法
  • 会使用浏览器伪装技术

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

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)

(9)觉得可以,点个赞再走!

网络爬虫---爬取糗事百科段子实战相关推荐

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

    "简说Python",选择"置顶/星标公众号" 福利干货,第一时间送达! 阅读本文大约6分钟,实战学习,老表建议你反复看,反复记,反复练. // 本文作者 王豪 ...

  2. 爬虫爬取糗事百科段子

    目录 糗事百科段子爬取 爬虫功能介绍 所需软件 网页解析 找到所需信息所在代码段 获取信息 编程思路分析 获取当前所有段子 对提取的内容进行优化 数据合并 查看点赞数最多的内容 总结 最后 附代码 糗 ...

  3. python爬虫经典段子_Python爬虫-爬取糗事百科段子

    闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url 2.先抓取HTML页面 importurllibimpo ...

  4. 【网络爬虫】爬取糗事百科段子

    1.前言 自动爬取糗事百科段子,使用Python编写. 输出文件路径需根据实际自己修改哦,默认的是输出100条段子,终止条件可以自己设置. 另糗事百科可能会改版,如有问题,欢迎留言,或者自行更改正则表 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Securing the Deep Learning Stack
  2. 如何快速将Android库发布到JCenter
  3. C# 序列化与反序列化json
  4. r语言安装ipsolve_R语言矩阵操作之矩阵运算
  5. nagios整合ganglia实现hadoop、Hbase监控及手机短信报警
  6. 图像识别---opencv安装
  7. [2018.10.17 T1] 斜率
  8. Centos软件安装库文件缺失(sqliteman安装中Could not find QScintilla library)
  9. 关于 ThreeJS 线宽 lineWidth 无法正常显示 太大 需要缩小 窗口缩放会影响线粗细 等问题
  10. 安卓开发之Intent使用介绍(显式Intent和隐式Intent)
  11. mysql gtid 1236错误_错误1236
  12. 程序员必看!掌门一对一java开发
  13. c语言静态变量与局部变量,C语言 全局变量、静态全局变量、局部变量、静态局部变量...
  14. 我们如何建立Schrödinger的div? 与Vue!
  15. 语义分析的一些方法(三)
  16. 小米智能家居技术分析
  17. Java详解去除字符串中空格的方法
  18. macino404 || cinema 4D 基础解释 || 第一篇
  19. Apache IoTDB PMC 乔嘉林荣获 2022 杰出开源贡献者|开源技术强大,开源文化活跃...
  20. 虾皮怎么注册开店,怎么开本土店铺?

热门文章

  1. Netbeans连接数据库
  2. 论文阅读 2DPASS: 2D Priors Assisted SemanticSegmentation on LiDAR Point Clouds LiDAR
  3. cxfreeze打包python项目踩坑笔记
  4. 医疗时鲜资讯:远程医疗服务的未来
  5. 小程序canvas绘制自定义分享图片并分享给好友
  6. 注册消防工程师交感联学习系统
  7. 计算机在职考研 知乎,在职考研几个基本常识介绍
  8. laravel6中使用广播推送消息
  9. scanf输入参数详解
  10. The service already exists