在引入这个爬取代码之前先说明俩个新的知识点:
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()