使用Requests模块进行爬虫

目标

使用requests模块爬取云栖社区的博文数据

安装

在windows系统下,打开cmd使用pip install resquests安装

准备工作

想要爬取一个网站,首先需要分析这个网站上面的信息,不要急于去编写代码,比如这里我爬的云栖社区,网址是:https://yq.aliyun.com,我们进去之后,搜索关于Python类的文章在这里插入图片描述
在图片当中我们可以看到,搜索到的数据有31716条,然后到下面翻页,并且把它们的网址放入一个记事本中,分析它们之间的区别在这里插入图片描述
随后尝试着将一些无关的信息去掉,看看在浏览器中能否正常运行,最后得出关键部分q带的是关键词,p带的是页码
在这里插入图片描述
在将网址信息搞定之后,我们需要的做的是了解每个网页当中文章的条数,以及总共有多少页,这关系到我们的循环数,在上面有讲到关于关键词Python的数据有31716条,该网站每页有15条博文,那么我们的循环数就是31716 // 15 + 1次。
循环数也搞定之后,接下来就是分析每篇文章的链接,我使用的是正则匹配,通过查看网页的源代码,结合ctrl + F很轻松的便可以找到文章的链接
例子
找出文章链接之后,会发现这里的网址是不全的,需要补全,具体如何补全这里不做陈述。点开文章,我主要是获取文章的标题和内容,也是和查找文章链接同样的方式,就不再陈述。

编码

import requests
import re
import time

key = str(input("please input you want key: "))
url = "https://yq.aliyun.com/search/articles/"
data = requests.get(url, params={"q": key}).text
pat1 = '<div class="_search-info">找到(.*?)条关于'
allling = re.compile(pat1, re.S).findall(data)[0]
#print(allling)
allpage = int(allling)
for i in range(0, int(allpage)):
    print("-----正在爬第" + str(i + 1) + "页-----")
    index = str(i + 1)
    getdata = {"q": key,
    "p": index,}
    data = requests.get(url, params = getdata).text
    pat_url = '<div class="media-body text-overflow">.*?<a href="(.*?)">'
    articles = re.compile(pat_url, re.S).findall(data)
    #print(articles)
    try:
        for j in articles:
            thisurl = "https://yq.aliyun.com" + j
            thisdata = requests.get(thisurl).text
            #print(thisdata)
            pat_title = '<p class="hiddenTitle">(.*?)</p>'
            pat_content = '<div class="content-detail unsafe markdown-body">(.*?)<div class="copyright-outer-line">'
            title = re.compile(pat_title, re.S).findall(thisdata)[0]
            content = re.compile(pat_content, re.S).findall(thisdata)[0]
            #print(title, content)
            fh = open("F:\\Python\\爬虫\\requests爬虫\\" + str(i) + "_" + str(time.time()) + ".html", "w", encoding="utf-8")
            fh.write(title + "<br /><br />" + content)
            fh.close()
    except IndexError:
        pass


    


代码其实很简单,最后我是将爬取的数据保存到了本地中。需要注意的是,每做一步都需要进行测试,不然等你写完代码出错了,回去找bug很麻烦,这里需要提醒的是因为有些文章被删除了,爬取的时候会是空值,如果不进行异常处理的话,就会报错

相关信息

请求方式:get、post、put等;
请求参数:params(get请求的参数)、headers(伪装浏览器,以字典方式存储)、proxies(伪装代理,以字典方式存储)、cookies、data(post请求的参数);
text:响应数据;
content:响应数据(b);
encoding:网页编码;
cookies:响应cookie;
url:当前请求的url。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值