您的位置:首页 > 编程语言 > Python开发

python爬虫:xpath

2018-01-19 10:18 316 查看
xpath学习网址:http://www.w3school.com.cn/xpath/index.asp
基础知识和实际操作存在一定差异,还在探索中,感觉使用xpath没比beatifulsoup快多少,可能是电脑问题
练习:
# -*- coding: utf-8 -*-
import requests
import urllib.request
from lxml import etree
import time
import random

#获取图片链接
def get_links(url):
links = []
wb_data = requests.get(url).text
#调用requests库,获取二进制的相应内容。注意,这里使用.text方法的话,下面的html解析会报错,大家可以试一下。这里涉及到.content和.text的区别了。简单说,如果是处理文字、链接等内容,建议使用.text,处理视频、音频、图片等二进制内容,建议使用.content。至于更详细的区别,就又可以写一篇文章了。
selector = etree.HTML(wb_data)
#使用lxml.html模块构建选择器,主要功能是将二进制的服务器相应内容response转化为可读取的元素树(element tree)。lxml中就有etree模块,是构建元素树用的。如果是将html字符串转化为可读取的元素树,就建议使用lxml.html.fromstring,毕竟这几个名字应该能大致说明功能了吧。
image_url = selector.xpath("//div[@class='grid-flex text-center js-entry-hover-actions']/a[last()-1]/@href")
#需要注意的是,xpath返回的结果都是序列
for img_url in image_url:
links.append(host + img_url)
# print(host + img_url)
time.sleep(random.randint(1,5))
return links

def save_imgs(link):
img_data = requests.get(link).content
selector = etree.HTML(img_data)
i = selector.xpath("//*[@id='content']/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/div[1]/div/div[2]/a/img/@src")[0]
imagename = "%%" + i.spilt('/')[-2] + ".jpg"#填写文件地址
urllib.request.urlretrieve(i,imagename)

if __name__ == '__main__':
url = 'https://weheartit.com/search/entries?utf8=%E2%9C%93&ac=1&query=flowers'
host = 'https://weheartit.com'
for link in get_links(url):
print(link)
save_imgs(link)
#xpath地址没调出来,所以直接在浏览器上copy的,不知道为什么换了两个编译器才调出来,可能存在编码问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: