python爬虫xpath实战练练手

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import requests
from lxml import etree
import os

url = 'https://www.sshs.cc/page/4'

# get htmlText
r = requests.get(url)
r.encoding = r.apparent_encoding

# parse htmlText
dom = etree.HTML(r.text)

# parse html hrefs return list
hrefs = dom.xpath("//article/header/h2/a/@href")
titles = dom.xpath("//article/header/h2/a/@title")
print("帖子链接解析完毕!")

if not os.path.exists('绅士会所壁纸爬虫'):
    print('已创建文件夹-->绅士会所壁纸爬虫')
    os.mkdir("绅士会所壁纸爬虫")
os.chdir('绅士会所壁纸爬虫')

for i in range(len(hrefs)):
    r1 = requests.get(hrefs[i])
    r1.encoding = r1.apparent_encoding
    dom1 = etree.HTML(r1.text)
    imgurl = dom1.xpath("//article/p/img/@src")
    imgname = dom1.xpath("//article/p/img/@alt")

    filename = re.sub('[\\\/:*?"<>|]', '', titles[i])
    if not os.path.exists(filename):
        print('已创建文件夹-->', filename)
        os.mkdir(filename)
    os.chdir(filename)
    print(filename, '正在下载...')
    for j in range(len(imgurl)):
        if not os.path.exists(imgname[j]):
            with open(imgname[j], 'wb') as f:
                f.write(requests.get(imgurl[j]).content)
        else:
            print('已存在图片-->', imgname[j])
    print(filename, '下载完成')
    os.chdir('..')

如上简单的代码,主要这次用xpath来寻找要爬的链接,主要重点在于解析xpath解析过程,注意中img是元素,src是属性,若要得到src链接就要用//img/@src(//前面省略),如果是//img[@src]那么返回的是他的属性类型,不是确切的url。此外里面还用到正则表达式用来排除文件夹非法字符的而不是用来寻找链接的。

url可由最后page/1改变数字得到其他网页,因为一页爬的时间还是太久了就只让他每次爬一张,而且都是福利也没啥好玩的,学习学习就行了。

不懂可问,不好可点。

你可能感兴趣的:(python爬虫xpath实战练练手)