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

Python网络爬虫

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)

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

这里是引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值