目录
jsonpath 请参考 https://goessner.net/articles/JsonPath/
xpath语法:
导入:
from lxml import etree
xpath helper插件:帮助我们从'element'中定位数据
1.选择节点(标签)
/html/head/div : 能够选中html下的head下的所有的 div标签
2."//":能够从任意节点开始选择
//li : 表示当前页面中所有 li 标签
/html/head//li : 表示 head 下的所有 li 标签
3.@ 符号:
1).定位元素:
//div[@class="demo"]/ul/li 选择class = "demo" 的 div 下的ul下的li [] 代表可以获取div这个标签中的属性
2).选择某个标签的属性值:
li/@class 可以获取到li标签的class 的值
3).并属性
input[contains(@class,"s_i")] #所有的input,有class属性,并且属性中带有s-i的节点
4.获取文本
/a/text() 就可以获得a标签下的一层文本
/a//text() 就可以获得a标签下的所有文本
5.点 当前节点
.a 表示当前节点下的a标签
例子:
import urllib.request
import urllib.parse
import time
import os
import random
from lxml import etree
def handle_request(url,page):
if page == 1:
url = url.format("")
else:
url = url.format("_"+str(page))
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",
}
request = urllib.request.Request(url=url,headers=headers)
return request
# 下载图片内容
def download_image(image_src):
dirpath = "photo"
if not os.path.isdir("photo"):
os.mkdir("photo")
# 文件名
file_name = os.path.basename(image_src)
file_path = os.path.join(dirpath,file_name)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",
}
img_request = urllib.request.Request(url=image_src, headers=headers)
img_response = urllib.request.urlopen(img_request)
file = open(file_path,"wb")
file.write(img_response.read())
file.close()
def parse_content(content):
tree = etree.HTML(content)
image_list = tree.xpath("//div[@class='clearfix psdk imgload']//img/@src2")
for image_src in image_list:
download_image(image_src)
def main():
url = "http://sc.chinaz.com/tupian/xingganmeinvtupian{}.html"
# url = "http://sc.chinaz.com/tupian/xingganmeinvtupian_2.html"
star_page = int(input("起始:"))
end_page = int(input("结束:"))
for page in range(star_page,end_page+1):
request = handle_request(url,page)
# 发送请求,获取相应
content = urllib.request.urlopen(request).read().decode()
parse_content(content)
time.sleep(random.randint(2,8))
if __name__ == '__main__':
main()
图片懒加载技术:
懒加载技术(前端):用到的时候才加载
实现方式:
刚开始写代码的时候 把 <img src2="图片地址">
用js监听用户的窗口,当img映入用户窗口时,向img新添加一个src属性,并且值为src2的图片地址