python批量爬取图片(XPath)

工具:python3.8,使用urllib库和lxml库进行爬取(安装方法可以进行百度)

目标网站:http://pic.netbian.com/(为了方便理解,只获取第一页)


代码

import urllib.request as ur
from lxml import etree#使用xpath获取页面上所有的图片的url

def save(url):
	#更改User-Agent来模拟浏览器登录
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
        #这个User-Agent是笔者通过Chrome访问时的请求头(可能有所不同)
    }
    req = ur.Request(url=url, headers=headers)
    #发送请求
    response = ur.urlopen(url)
    html = response.read()
   	#html的类型为bytes
    return html


if __name__=='__main__':
    url = 'http://pic.netbian.com/'#目标网站
    html = save(url)

    #将bytes的类型转换成lxml.etree._Element
    html_data = etree.HTML(html)
    #查找所有的图片的url,并赋值给一个数组
    result = html_data.xpath('//div[3]/ul/li/a/span/img/@src')
    #下载所有获取的图片(迭代)
    filename = 0
    for each in result:
        filename = filename + 1
        #保存图片
        with open ( str( filename ) + '.jpg', 'wb') as f: 
        	#str( filename ) + '.jpg'为文件的名字,'.jpg'表示为该文件为图片
            img = save( url + each )
            #url+each为图片的url(需要对HTML文档进行分析)
            f.write( img )

代码的部分讲解

urllib中的request模块:最基本的HTTP请求模块,可以用来发送HTTP请求,并接收服务端的响应数据。(这个过程就像在浏览器地址栏输入URL,然后按Enter键一样)

urlopen函数:返回一个对象,read是这个对象的一个方法。

User-Agent的作用:浏览器通常会通过发送的HTTP请求的请求头来判断该请求是否通过浏览器访问,如果服务端没有找到请求头或请求头错误,就会拒绝用户的请求。所以可以通过Request类构造方法的headers命名参数设置HTTP请求头。


xpath的用法:先将bytes的类型转换成lxml.etree._Element在进行xpath的操作。

XPath语法规则描述
nodename选取此节点的所有子节点
/从当前节点选取直接子节点
//从当前节点选取子孙节点
.选取当前节点
选取当前节点的父节点
@选取属性

如果要选取HTML文档所有的< li >节点,可以使用’//li’。
如果要选取当前节点(< li >)下所有的< p >节点,可以使用’/p’。
如果要选取HTML文档所有的< li >节点下所有的< p >节点,可以使用’//li/p’。
如果要选取HTML文档所有的< li >节点下所有的< p >节点的herf属性,可以使用’//li/p/@herf’。


关于open打开文件的用法:

 f = open('E:\python\python\test.txt', 'r')

标示符’r’表示读,这样,我们就成功地打开了一个文件。

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在。
读取文件内容
如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示。

 f.read()

关闭文件
最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

 f.close()

写入文件内容

 f = open('E:\python\python\test.txt', 'w')
 f.write('Hello, python!')
 f.close()

补充

User-Agent如何查看:在浏览器中进入开发者模式(F12)在这里插入图片描述

xpath的简单用法:使用Chrome上的XPath Helper。
在这里插入图片描述
快速获取目标的XPath
在这里插入图片描述

在这里插入图片描述


结束语:笔者也是萌新,如果存在写的不对的地方,还请在评论区中指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值