最近学习lxml库,拿一个普通的手机壁纸网站练手,现将具体操作过程记录下来,一来可以达到记录的作用,二来也希望能和大家多交流,提高自己的代码能力。
第一步:导入需要的库表采用requests库进行页面抓取;
采用lxml解析页面;
采用urllib.request中urlretrieve对图片进行下载导入的python库
第二步:采用requests库进行页面抓取;
1.构建请求头构建请求头,目的是将爬虫隐藏成一个浏览器爬虫,虽然这个网站并不会因为没有反爬,但是养成良好的习惯总归是好的
2.爬取页面response为一个类文件,而content为bytes类型,为了方便我们查看,需要采用decode进行解码
第三步:采用lxml解析html网页
1.上一步中html有时候可能并非严格的html网页格式,因此采用etree.HTML()对文本进行修正
2.采用lxml解析器解析网页需要爬取的网站页面
谷歌浏览器F12
ctrl+F,然后输入巴黎看到【巴黎】出现在class=egeli_pic_li的div中,继续分析可以看到图片信息均在class=egeli_pic_li的div中获取子孙节点中所有class=egeli_pic_li的div节点
定义列表用以保存图片网址和图片说明这里同时可以考虑采用字典格式保存
获取图片网址和说明xpath解析结果是以列表个数返回,.//img/@src代表在div下的img子孙节点中src的属性信息,用以获取图片网址
第三步:采用urllib.request库中urlretrieve函数进行图片下载urlretrieve()函数的用法爬取结果
##导入需要的库表
import requests
from lxml import etree
from urllib.request import urlretrieve
##首先构建请求头
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer':'手机壁纸_锁屏壁纸_高清_背景图片_手机壁纸大全-回车桌面'
}
url = 'https://sj.enterdesk.com/2.html'
response = requests.get(url,headers=headers)
html = response.content.decode('utf-8')
##采用lxml解析html网页
##担心html格式问题,所以先采用etree.HTML()对文本进行修正
html = etree.HTML(html)
##通过查看图片网址,得出网页在class=egeli_pic_li的div中
##采用lxml.Xpath进行解析
divs = html.xpath("//div[@class='egeli_pic_li']")
##考虑下如何采用字典进行保存
pic_urls = []
pic_titles = []
for div in divs:
#print(etree.tostring(div,encoding='utf-8').decode('utf-8'))
src = div.xpath(".//img/@src")[0]
pic_urls.append(src)
title = div.xpath(".//img/@title")[0]
pic_titles.append(title)
print(pic_urls)
print(pic_titles)
i=0
##采用urllib.request库中urlretrieve函数进行图片下载
for pic_url in pic_urls:
urlretrieve(pic_url,"C:\\Users\\HUAWEI\\Desktop\\爬取信息\\"+ str(pic_titles[i])+".jpg")
i=i +1
代码比较简单,还差整合一下,构建一个网站生成函数,可以做到批量下载图片。