【代码回溯】最简单的一个python爬虫代码
2021/8/19 17:07:36
本文主要是介绍【代码回溯】最简单的一个python爬虫代码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
人在江湖飘,总是会忘记很多旧事。
有些代码写完以后,下次见面变成了陌路之客。
---------------HLK
这里是代码回溯专题,主要是回忆我自己写的代码及原理,让自己不会忘记曾经写下的东西。
那么今天来讲讲最最最初级的python爬虫程序,"爬某网站的图片"。
要爬的网页代码结构是
<html> <head></head> <body> ... <img src="目标网址"> <img src="目标网址2"> <img src="目标网址3"> ... </body> <html>
我们要做的操作是:
1、向网页发送请求并获得网页代码
2、解析网页代码里img标签的src属性,访问src属性里的网址并下载图片
-
详细的操作说明
-----------------------------------------------------------------------
首先,本文用的组件为
请求库 Request
解析库 BeautifulSoup
所以请在py文件的最开头输入
import requests from bs4 import BeautifulSoup
如果没有这两个库的话,请提前下载好。
-----------------------------------------------------------------------
1、向网页发送请求并获得网页代码
首先,最基础的代码是这三句。
response = requests.get(url, headers=header) #发送带有请求头的请求 print(response) #输出响应信号 page_content = response.content.decode("utf-8") #将网页内容以utf-8的编码格式输出
将page_content抓到手就算成功。(你可以用print或者open().write去看一下输出的结果与你在浏览器里看到的是否相同)
当响应信号为200的时候,说明请求成功。
其余情况请自行百度解决。
关于代码里的参数url和header:
url即你想要爬的网页网址。
header是向网页发送请求时附加的请求头。
一般是这样的格式。
header = { 'accept-language':'zh-CN,zh;q=0.9,en;q=0.8;en-GB;q=0.7,en-US;q=0.6', 'cache-control': 'max-age=0', 'accept-encoding': 'gzip, deflate, br', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' }
那么这个请求头的内容是怎么得来的呢?实际上是抄的浏览器访问网页时的请求头。
为了模仿浏览器浏览,请大家在该网站里用开发者工具先抓一下请求包,看看请求头的内容
下图是用Chrome的开发者工具查看的百度首页的请求头。(打开network,刷新该网页,然后查看第一个请求就行了。一定要刷新哦~)
这样你就可以将一些请求头里的数据复制到代码里,达到爬虫模仿浏览器的效果。(当然了,这只是最基本的爬虫操作,爬很多网站过不了关的)
2、解析网页代码里img标签的src属性,访问src属性里的网址并下载图片
获取了page_content之后,我们就需要用BeautifulSoup对其进行解析。
soup = BeautifulSoup(page_content, "html.parser") imgs = soup.find_all(name='img') #获取网页里关于所有img标签的数组
上方代码会返回一个包含所有img标签的数组,然后我们只要遍历数组,然后用get方法即可获得src值
---------------------------------------------------------------------------------
在这之前我想了很多方法去取src值,都相当地麻烦。
感谢niewzh 大佬的博客,让我用两三条指令便轻松地获取了属性值
博客地址:https://blog.csdn.net/ScapeD/article/details/81813463
---------------------------------------------------------------------------------
如下所示:get方法成功获取了src……不对,是data-aload值???
for a in imgs: #遍历img标签数组里的所有值 data_address = a.get('data-aload') #用get方法将每个img标签里面对应的属性抽取出来
实际上获取的属性之所以是data-aload,原因是很多网站有特殊的屏蔽机制,src值在爬出的时候内容会变成"loading"之类的非网址值。(当然,也许只是我遇到的网站比较特殊)
而经过仔细分析,我发现data-aload属性里反而有我想要的值,因此改变了要爬的参数。
你的开头计划的需求,很可能会与实际不符,要时刻与现况看齐。
由于爬出来的标签中有一些没有相对应的属性(例如本文要爬的data-aload)的图片,那些就需要另外特殊处理,。
这里将我们所爬到的标签进行一些过滤和修补,然后就可以将对应网址的图片下载下来了。
if data_address != None: #只对有src值的img标签进行操作 data_address=data_address.split()[0]; #返回的src值里有一行空行,此处将其处理了 response = requests.get(url, headers=header) #发送带有请求头的请求 print("downloading") #提示信息,用来提示你正在保存图片 open("本地的保存地址", "wb").write(response.content) #将response的内容(即图片)保存
那么以上就是分步解析了,总的代码是这样的(无函数无类):
※有需要的还可以在里面加上num参数来方便给图片排序,或者加入time.sleep计时器方便调整下载速度之类的。
※这里的header都用了同一个请求头,具体情况还请具体分析
import requests from bs4 import BeautifulSoup #--------------------------------------- 请求部分 ----------------------------------------------------- url = 'https://weloma.net/729/58078/' header = { 'accept-language':'zh-CN,zh;q=0.9,en;q=0.8;en-GB;q=0.7,en-US;q=0.6', 'cache-control': 'max-age=0', 'accept-encoding': 'gzip, deflate, br', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' } response = requests.get(url, headers=header) #发送带有请求头的请求 print(response) #输出响应信号 page_content = response.content.decode("utf-8") #将网页内容以utf-8的编码格式输出 #--------------------------------------- 解析部分 ----------------------------------------------------- soup = BeautifulSoup(page_content, "html.parser") imgs = soup.find_all(name='img') #获取网页里关于所有img标签的数组 for a in imgs: #遍历img标签数组里的所有值 data_address = a.get('data-aload') #用get方法将每个img标签里面对应的属性抽取出来 if data_address != None: #只对有src值的img标签进行操作 data_address=data_address.split()[0]; #返回的src值里有一行空行,此处将其处理了 response = requests.get(url, headers=header) #发送带有请求头的请求 #print("downloading") #提示信息,用来提示你正在保存图片 print(response) #输出响应信号,用作故障测试检查点 open("本地的保存地址", "wb").write(response.content) #将response的内容(即图片)保存
这篇关于【代码回溯】最简单的一个python爬虫代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享