python项目之站长素材爬取
一、学习资源
这位老师讲的很有激情,并知识点和逻辑清晰,强烈推荐
二、知识点介绍
1、xpath使用
安装详情请参考往期文章:
2、xpath基本语法
3、案例演示
# coding=utf-8 from lxml import etree #xpath解析 #(1)解析本地文件 etree.parse #(2)解析服务器文件 response.read().decode(utf-8)****** etree.HTML() #xpath解析本地文件 tree = etree.parse(070_解析_xpath的基本使用.html) #tree.xpath(xpath路径) #查找ul下面的li #li_list = tree.xpath(//ul/li/text()) #查找所有有id的属性的li标签 #text()获取标签中的内容 #li_list = tree.xpath(//ul/li[@id]/text()) #找到id为l1的li标签 注意引号的问题 单引号里面的字符串要加双引号 #li_list = tree.xpath(//ul/li[@id="l1"]/text()) #查找到id为l1的li标签的class的属性值 # li = tree.xpath(//ul/li[@id="l1"]/@class) #查询id中包含l的li标签 #li_list = tree.xpath(//ul/li[contains(@id,"l")]/text()) #查询id的值以l开头的li标签 #li_list = tree.xpath(//ul/li[starts-with(@id,"c")]/text()) #查询id为l1和class为c1的 #li_list = tree.xpath(//ul/li[@id="l1" and @class="c1"]/text()) li_list = tree.xpath(//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()) #判断列表的长度 print(li_list) print(len(li_list))
三、项目详细讲解
1、分析
①首先要获取url,但是因为要获取前十页的数据,url是一个变量,通过对网页的检查可以发现网页的url有规律。
2、步骤
(1)请求对象定制
解决了url的问题之后,请求对象的定制就变得简单了,就是把之前的内容进行了封装
(2)获取响应数据
相应的获取响应数据也是把之前的代码进行封装
(3)下载数据
下载图片需要用到urllib库,此时需要图片的地址和文件的名字
首先解析获取到的服务器文件,然后通过xpath去查找图片的地址和文件的名字
然后通过遍历的方式下载图片
文件内容:
四、源代码
# coding=utf-8 #(1)请求对象的定制 #(2)获取网页源码 #(3)下载 #需求 下载的是前十页的图片 #https://sc.chinaz.com/tupian/qinglvtupian.html #https://sc.chinaz.com/tupian/qinglvtupian_page.html import urllib.request from lxml import etree def create_request(page):#请求对象定制 if (page == 1): url = https://sc.chinaz.com/tupian/qinglvtupian.html else : url = https://sc.chinaz.com/tupian/qinglvtupian_+str(page)+.html headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" } request = urllib.request.Request(url=url,headers=headers) return request def get_content(request):#获取网页源码 response = urllib.request.urlopen(request) content = response.read().decode(utf-8) return content def down_load(content):#下载 #下载图片 #urllib.request.urlretrieve(图片地址,文件的名字) tree = etree.HTML(content)#解析服务器文件 name_list = tree.xpath(//div[@id="container"]//a/img/@alt) #一般设计图片的网站都会进行懒加载 所以这里的图片地址为src2 src_list = tree.xpath(//div[@id="container"]//a/img/@src2) for i in range(len(name_list)): name = name_list[i] src = src_list[i] url = https: + src urllib.request.urlretrieve(url=url,filename=./loveImg/ +name + .jpg) if __name__ == __main__: start_page = int(input(请输入起始页码)) end_page = int(input(请输入结束页码)) for page in range(start_page,end_page+1): #(1)请求对象定制 request = create_request(page) #获取网页源码 content = get_content(request) #(3)下载 down_load(content)
整体思路可以参考往期文章: