爬虫(八)Chinaz的图片爬取

在引入这个爬取代码之前先说明俩个新的知识点:

1.懒加载:

用户在前端浏览网页图片的时候很多时候不是一打开网站就全部显示的,而是当图片进入用户的可视范围时才会显示出来,这是因为在前端网页中采用了懒加载技术,通俗的讲就是img标签的src属性被修改成了src2属性,当JS触发时才将src2改成src,图片显示出来。

2.提取基址:

可以利用os库中的os.path.basename("地址")提取地址中的基址。

下面是具体的代码示例:

import urllib.request
import urllib.parse
import os
from lxml import etree


def handel_request(url):
	headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko)'
                  ' Chrome/63.0.3239.132 Safari/537.36',
	}
	return urllib.request.Request(url, headers=headers)


def down_img(path):
	if not os.path.exists("paqu_picters"):
		os.mkdir("paqu_picters")
    @ 获取路径的基址并作为图片的名字
	picters_name = os.path.basename(path)
	request = handel_request(path)
	response = urllib.request.urlopen(path).read()
	with open("paqu_picters/"+picters_name, 'wb') as fp:
		fp.write(response)


def parse_content(response):
	tree = etree.HTML(response)
	filepath = tree.xpath('//div[@id="container"]/div/div/a/img/@src2')
	for path in filepath:
		# print(os.path.basename(path))	
		down_img(path)


def main():
	url = 'http://sc.chinaz.com/tupian/meinvxiezhen{0}.html'
	start_page = int(input("请您输入您要开始爬取的页数:"))
	end_page = int(input("请您输入您要爬取的最后页数:"))
	for page in range(start_page, end_page+1):
		if(page == 1):
			url_t = url.format('')
		else:
			url_t = url.format('_'+str(page))
        # 利用url获取请求
		request = handel_request(url_t)
        # 利用请求获取响应
		response = urllib.request.urlopen(request).read().decode()
        # 将获取到的相应进行解析
		parse_content(response)


main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值