Python版本:Python3.X 经过上一篇博客,相信大家对爬虫有一定认识了,这一篇我们系统的来讲解一下如何抓取静态网页资源。(我也是初学爬虫不久,我只是将学到的知识总结一下,给大家,如果有错请大家指出,谢谢!) 打开cmd,键入:(详细安装教程,请参考上一篇博客) 在Requests中,常用功能就是获取某个网页的内容。现在我们还是以豆瓣(https://movie.douban.com/chart)来举例。 这样就返回了一个叫req的response响应对象,我们可以从中获取想要的信息。上述代码结果如图: 有时为了请求特定数据时,我们往往需要在 URL 中加入某些数据。在构件 URL 时,我们通常将数据跟在一个问号后面,并以键/值的形式放入 URL 中,例如 https://movie.douban.com/top250?start=0。(这里就是将start=0传递到https://movie.douban.com/top250) 在Requests中,你可以直接把参数放到字典中,用params构建到URL中。 运行结果: 请求头Headers提供了关于请求、响应或发送其他实体的信息。对于爬虫而言,请求头十分重要。如果没有指定的请求头或请求头和实际网页不一样,就可能无法获得正确的结果。我们要如何才能获取到网页的请求头呢? 我们以(https://movie.douban.com/top250?start=0)为例,进入网页检查页面,下图中箭头所指的部分就是该网页的请求头部分(Requests Headers) 有时候爬虫会遇见服务器长时间不返回,这时程序就会一直等待,使得程序没有顺利执行。因此,可以用 Requests 在 timeout 参数设定等待秒数结束之后停止等待响应。(我们一般把这个值设置为20秒) 在这我们把秒数设置为0.0001秒,以此来查看会抛出什么异常: 运行结果: 我们以 https://www.qidian.com/rank/yuepiao 为例,来进行实践,目的是获取起点中文网中月票榜的一百本书的名称。 打开起点中文网月票榜的网页,使用“检查”查看网页的请求头,编写好我们的请求头。 第一页只有20本书的信息,如果想要获取所有80本书的信息,就需要获取总共4页的内容。 我们通过单击下一页发现网址从(https://www.qidian.com/rank/yuepiao?style=1&page=1)变成了(https://www.qidian.com/rank/yuepiao?style=1&page=2)。 这样就很容易理解了,每多一页,就给网页地址的page参数加上1。 然后我们通过上一篇博客所提到的方法,找到书籍的标题信息所在的div标签 可以发现,每一本书的标题都在class=’book-mid-info’的div标签下的a标签中,由此我们可以写出代码: 运行结果: 我们获取到信息后,可以将信息保存到txt文本中。 运行结果:Python3网络爬虫基本操作(二):静态网页抓取
一.前言
运行环境:Windows
IDE:PyCharm二.静态网页抓取
1.安装Requests库
pip install requests
2.获取网页相应内容
import requests link = "https://movie.douban.com/chart" headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36' } req = requests.get(link, headers=headers) print("响应状态码:", req.status_code) print("文本编码:", req.encoding) print("响应体:", req.text)
(1)req.status_code 用于检测响应状态码。
(所有状态码详情:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin)
(2)req.encoding 是服务器内容使用的文本编码格式。
(3)req.text 是服务器响应内容。
(4)req.json() 是Requests中内置的JSON解码器。3.定制Requests
(1)Get请求
例如:import requests key = {'start': '0'} req = requests.get('https://movie.douban.com/top250', params=key) print("URL正确编码", req.url)
(2)定制请求头
提取其中的重要部分,可写出代码:import requests link = "https://movie.douban.com/top250?start=0" headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36', 'Host':'movie.douban.com' } req = requests.get(link, headers=headers) print("响应状态码:", req.status_code)
(3)超时
import requests link = "https://movie.douban.com/top250?start=0" headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36', 'Host':'movie.douban.com' } req = requests.get(link, headers=headers, timeout=0.0001) print("响应状态码:", req.status_code)
三.项目实践
1.网站分析
请求头:headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36', 'Host': 'www.qidian.com' }
2.信息获取
import requests from bs4 import BeautifulSoup def get_novel(): headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36', 'Host': 'www.qidian.com' } novel_list = [] for i in range(1,5): url= 'https://www.qidian.com/rank/yuepiao?style=1&page=' + str(i) req = requests.get(url, headers=headers, timeout= 20) bs = BeautifulSoup(req.text, 'html.parser') list = bs.find_all('div', class_='book-mid-info') for each in list: novel = each.h4.a.text.strip() novel_list.append(novel) return novel_list lists = get_novel() print (lists)
3.储存数据
import requests from bs4 import BeautifulSoup def get_novel(): headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36', 'Host': 'www.qidian.com' } novel_list = [] for i in range(1,5): url= 'https://www.qidian.com/rank/yuepiao?style=1&page=' + str(i) req = requests.get(url, headers=headers, timeout= 20) bs = BeautifulSoup(req.text, 'html.parser') list = bs.find_all('div', class_='book-mid-info') for each in list: novel = each.h4.a.text.strip() novel_list.append(novel) with open('lists.txt', "a", encoding='utf-8') as f: f.write(novel) f.write('n') f.close() return novel_list lists = get_novel() print (lists)
这样我们就获取到这80本书籍的标题信息了。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算