【原文】https://blog.csdn.net/weixin_65423581/article/details/122533646
- 1.模块的使用
- (1).random模块:
主要是为了产生随机数作为写入jpg的名称(这里其实可以用字典形式表示之后再提取图片主要内容作为不同jpg的名称)。
- (2).requests模块:
通过请求获取网页数据。
- (3)lxml模块:
主要用来从网页数据中通过Xpath方法查找自己想要的数据(这里etree会报错但是能正常使用不用管)。
-
2.主要爬虫思路
-
(1).首先要有一个start_url作为第一次网页数据的获取
-
(2).通过Xpath方法获取数据中jpg的URL
-
(3).同时通过Xpath方法获取’下一页‘的URL作为next_url
-
(4).进入循环
-
-
3.代码如下:
import random
import requests
from lxml import etree
class Jpgspirer:
def __init__(self):
self.header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
"cookie": "Hm_lvt_86200d30c9967d7eda64933a74748bac = 1642225685, 1642344194;t = 244406d180636c9c3bf6b1439e8d8351;r = 1418;Hm_lpvt_86200d30c9967d7eda64933a74748bac = 1642344258"
}
def res(self,start_url):#获取网页响应数据
res=requests.post(start_url,headers=self.header)
return res.content.decode()
def maincontent(self,content):#获取jpg的url
html=etree.HTML(content)#将html数据规范化便于查找
ret=html.xpath('//div[@class=\"egeli_pic_li\"]//img/@src')#查找jpg-URL
return ret
def next_url(self,content):#获取下一页URL
html=etree.HTML(content)#将数据规范化
ret=html.xpath('//a[@class=\"next_p\"]/@href')#查找next_url
if len(ret)>0: #判断next_url是否存在,若不存在返回None值以便结束循环
return ret[0]
else:
return None
def save(self,jpglist):# 将获取到的每个jpg写入到当前文件夹
for item in jpglist:
filename = "{}.jpg"
fname = filename.format(random.uniform(1, 1000))
res = requests.get(item, headers=self.header)
with open(fname,'wb') as file:
file.write(res.content)
print('保存成功')
def run(self,start_url): #实现主要逻辑
content=self.res(start_url)
jpg_list=self.maincontent(content)
next_url=self.next_url(content)
self.save(jpg_list) #start_url数据获取并得到next_url
while next_url!=None: #进入循环
content=self.res(next_url)
jpg_list.extend(self.maincontent(content))
next_url=self.next_url(content)
self.save(jpg_list)
if __name__ == '__main__':
Spider=Jpgspirer()
Spider.run(' https://mm.enterdesk.com/')#传入start_url
标签:content,翻页,Python,res,self,jpg,next,爬取,url
From: https://www.cnblogs.com/aixiu/p/16807497.html