爬取mm图片

本文介绍了使用Python进行网页图片爬取的步骤,包括导入requests和lxml库,设置User-Agent,解析HTML,XPath定位图片元素,处理编码问题,以及保存图片到本地。在实践中遇到了树化页面错误、列表越界、编码转换和文件路径等问题,并给出了相应的解决方案。
摘要由CSDN通过智能技术生成

上网址:https://pic.netbian.com/4kmeinv/
前面几步其实都一样,导入模块,指定url和headers,发起请求,获得请求数据

import requests
from lxml import etree
import os
# if not os.path.exists('./meinv'):
#     os.mkdir('./meinv')
url='https://pic.netbian.com/4kmeinv/'
headers={
    'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'
}
response=requests.get(url=url,headers=headers)
# response.encoding='utf-8'
page_list=response.text

然后是xpath的特色 将网页树化根据树化页面找到我们需要的特定的数据

tree=etree.HTML(page_list)
li_list=tree.xpath('//div[@class="slist"]/ul/li')

for li in li_list:
    se_src='https://pic.netbian.com'+li.xpath('./a/img/@src')[0]
    se_name=li.xpath('./a/img/@alt')[0]+'.jpg' 
    se_name=se_name.encode('iso-8859-1').decode('gbk') 

最后持久化存储

img_data=requests.get(url=se_src,headers=headers).content
img_path='meinv'+se_name
with open (img_path,'wb') as fp:
    fp.write(img_data)
    print (se_name+' finish')

今天遇到的几个问题主要有
树化页面时tree=etree.HTML…我写成了.xpath 这属于**的一个错误
第二个就是 部分代码输错后报错为 IndexError: list index out of range 超出列表范围或者列表不存在,这里很显然是列表不存在
第三个是 出现乱码时的处理方式
response.encoding=‘utf-8’ se_name=se_name.encode(‘iso-8859-1’).decode(‘gbk’)
这两个换着试,不可以一起试

第四个是 持久化存储时
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

第五个是刚刚发现的 持久还存储时img_path里面文件夹后应该加/否则python把它当作字符串处理

总代码:

import requests
from lxml import etree
import os
# if not os.path.exists('./meinv'):
#     os.mkdir('./meinv')
url='https://pic.netbian.com/4kmeinv/'
headers={
    'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'
}
response=requests.get(url=url,headers=headers)
# response.encoding='utf-8'
page_list=response.text

tree=etree.HTML(page_list)
li_list=tree.xpath('//div[@class="slist"]/ul/li')

# fp=open('./')
for li in li_list:
    se_src='https://pic.netbian.com'+li.xpath('./a/img/@src')[0]
    se_name=li.xpath('./a/img/@alt')[0]+'.jpg' 
    se_name=se_name.encode('iso-8859-1').decode('gbk') 
    # print(se_name,se_src)
    
    img_data=requests.get(url=se_src,headers=headers).content
    img_path='meinv/'+se_name
    with open (img_path,'wb') as fp:
        fp.write(img_data)
        print (se_name+' finish')
    
    

最后 附上mm图片
在这里插入图片描述

再来一个在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值