python爬虫:xpath

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的,不知道为什么换了两个编译器才调出来,可能存在编码问题


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值