需求
获取网页源码,用xpath进行解析获取网页中需要的图片地址及其名字,最后下载在本地。
代码
1.先定制请求对象方法
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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
}
request=urllib.request.Request(url=url,headers=headers)
return request
2.获取网页源码方法
def get_content(request):
response=urllib.request.urlopen(request)
#不写utf-8容易出现中文乱码
content=response.read().decode('utf-8')
return content
3.下载图片方法
def down_load(content):
tree=etree.HTML(content)
name_list=tree.xpath('//div[@class="container"]/div[2]/div/img/@alt')
src_list=tree.xpath('//div[@class="container"]/div[2]/div/img/@data-original')
for i in range(len(src_list)):
name=name_list[i]
#由于爬取的图片地址缺少https协议所以要加上这个
url='https:'+src_list[i]
print(name,url)
#url是图片地址,filename是要下载在那个文件中 ,文件必须存在并且最后一定要加/ urllib.request.urlretrieve(url=url,filename='C:/Users/lenovo/Desktop/love/'+name+'.jpg')
注:这里的xpath表达式真的很容易错误,用了xpath的插件可以匹配出数据,但是放到代码里数据为空,所以要把层级关系看清楚,把表达式写清楚。
4.main方法
if __name__ == '__main__':
start_page=int(input('请输入起始页码'))
end_page=int(input('请输入结束页码'))
for page in range(start_page,end_page+1):
request= create_request(page)
content=get_content(request)
down_load(content)
5.结果




被折叠的 条评论
为什么被折叠?



