python百行代码实现汉服圈图片爬取
目录
- 分析网站
- 子链接获取
- 获取标题和图片地址
- 保存图片
- 主函数
话不多说,我们下面详细介绍图片爬取。
分析网站 网址如下:
https://www.aihanfu.com/zixun/tushang-1/
这是第一页的网址,根据观察,第二页网址也就是上述网站序号1变成了2,依次类推,就可以访问全部页数。
文章图片
根据图示,我们需要获得每个子网站的链接,也就是href中网址,然后进入每个网址,寻找图片网址,在下载就行了。
子链接获取 为了获取上图中的数据,我们可以用soup或者re或者xpath等方法都可以,本文中小编使用xpath来定位,编写定位函数,获得每个子网站链接,然后返回主函数,这里使用了一个技巧,在for循环中,可以看看!
def get_menu(url, heades):"""根据每一页的网址获得每个链接对应的子网址params: url 网址"""r = requests.get(url, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodinghtml = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html)# 查找每个子网址对应的链接, 然后返回children_url = html.xpath('//div[@class="news_list"]//article/figure/a/@href')for _ in children_url:yield _
获取标题和图片地址 为了尽量多的采集数据,我们把标签和图片地址采集一下,当然如果其他项目需要采集发布者和时间,也是可以做到多的,本篇就不再展开。
文章图片
我们点开一个网址链接,如上图所示,可以发现标题在head的节点里面,获取标题是为创建文件夹时使用。
【python百行代码实现汉服圈图片爬取】代码如下:
def get_page(url, headers):"""根据子页链接,获得图片地址,然后打包下载params: url 子网址"""r = requests.get(url, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodinghtml = etree.HTML(r.text)html = etree.tostring(html)html = etree.fromstring(html)# 获得标题title = html.xpath(r'//*[@id="main_article"]/header/h1/text()')# 获得图片地址img = html.xpath(r'//div[@class="arc_body"]//figure/img/@src')# title 预处理 title = ''.join(title)title = re.sub(r'【|】', '', title)print(title)save_img(title, img, headers)
保存图片 在翻转每一页时我们都需要把子链接对应的图片保存下来,此处需要注意对请求的状态判断、路径判断。
def save_img(title, img, headers):"""根据标题创建子文件夹下载所有的img链接,选择更改质量大小params:title : 标题params:img :图片地址"""if not os.path.exists(title):os.mkdir(title)# 下载for i, j in enumerate(img):# 遍历该网址列表r = requests.get(j, headers=headers)if r.status_code == 200:with open(title + '//' + str(i) + '.png', 'wb') as fw:fw.write(r.content)print(title, '中的第', str(i), '张下载完成!')
主函数
if __name__ == '__main__':""" 一页一页查找params : None"""path = '/Users/********/汉服/'if not os.path.exists(path):os.mkdir(path)os.chdir(path)else:os.chdir(path)# url = 'http://www.aihanfu.com/zixun/tushang-1/'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'' AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/81.0.4044.129 Safari/537.36'}for _ in range(1, 50):url = 'http://www.aihanfu.com/zixun/tushang-{}/'.format(_)for _ in get_menu(url, headers):get_page(_, headers)# 获得一页
至此我们已经完成了所有环节,关于爬虫的文章,小编已经不止一次的介绍了,一方面是希望大家可以多多熟悉爬虫技巧,另外一方面小编认为爬虫是数据分析、数据挖掘的基础。没有爬虫获取数据,何来数据分析。
以上就是python百行代码实现汉服圈图片爬取的详细内容,更多关于python爬取汉服圈图片的资料请关注脚本之家其它相关文章!
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)