python项目之站长素材爬取

一、学习资源

这位老师讲的很有激情,并知识点和逻辑清晰,强烈推荐

二、知识点介绍

1、xpath使用

安装详情请参考往期文章:

2、xpath基本语法

3、案例演示

# coding=utf-8
from lxml import etree

#xpath解析
#(1)解析本地文件    etree.parse
#(2)解析服务器文件  response.read().decode(utf-8)******    etree.HTML()

#xpath解析本地文件
tree = etree.parse(070_解析_xpath的基本使用.html)

#tree.xpath(xpath路径)

#查找ul下面的li
#li_list = tree.xpath(//ul/li/text())

#查找所有有id的属性的li标签
#text()获取标签中的内容
#li_list = tree.xpath(//ul/li[@id]/text())

#找到id为l1的li标签   注意引号的问题   单引号里面的字符串要加双引号
#li_list = tree.xpath(//ul/li[@id="l1"]/text())

#查找到id为l1的li标签的class的属性值
# li = tree.xpath(//ul/li[@id="l1"]/@class)

#查询id中包含l的li标签
#li_list = tree.xpath(//ul/li[contains(@id,"l")]/text())

#查询id的值以l开头的li标签
#li_list = tree.xpath(//ul/li[starts-with(@id,"c")]/text())

#查询id为l1和class为c1的
#li_list = tree.xpath(//ul/li[@id="l1" and @class="c1"]/text())

li_list = tree.xpath(//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text())
#判断列表的长度
print(li_list)
print(len(li_list))

三、项目详细讲解 

1、分析

①首先要获取url,但是因为要获取前十页的数据,url是一个变量,通过对网页的检查可以发现网页的url有规律。

2、步骤

(1)请求对象定制

解决了url的问题之后,请求对象的定制就变得简单了,就是把之前的内容进行了封装

(2)获取响应数据

相应的获取响应数据也是把之前的代码进行封装

(3)下载数据

下载图片需要用到urllib库,此时需要图片的地址和文件的名字

首先解析获取到的服务器文件,然后通过xpath去查找图片的地址和文件的名字

然后通过遍历的方式下载图片

文件内容:

 四、源代码

# coding=utf-8
#(1)请求对象的定制
#(2)获取网页源码
#(3)下载


#需求    下载的是前十页的图片
#https://sc.chinaz.com/tupian/qinglvtupian.html
#https://sc.chinaz.com/tupian/qinglvtupian_page.html
import urllib.request
from lxml import etree


def create_request(page):#请求对象定制
    if (page == 1):
        url = https://sc.chinaz.com/tupian/qinglvtupian.html
    else :
        url = https://sc.chinaz.com/tupian/qinglvtupian_+str(page)+.html
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    request = urllib.request.Request(url=url,headers=headers)
    return request

def get_content(request):#获取网页源码
    response = urllib.request.urlopen(request)
    content = response.read().decode(utf-8)
    return content

def down_load(content):#下载
    #下载图片
    #urllib.request.urlretrieve(图片地址,文件的名字)
    tree = etree.HTML(content)#解析服务器文件
    name_list = tree.xpath(//div[@id="container"]//a/img/@alt)
    #一般设计图片的网站都会进行懒加载   所以这里的图片地址为src2
    src_list = tree.xpath(//div[@id="container"]//a/img/@src2)
    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = https: + src
        urllib.request.urlretrieve(url=url,filename=./loveImg/ +name + .jpg)

if __name__ == __main__:
    start_page = int(input(请输入起始页码))
    end_page = int(input(请输入结束页码))
    for page in range(start_page,end_page+1):
        #(1)请求对象定制
        request = create_request(page)
        #获取网页源码
        content = get_content(request)
        #(3)下载
        down_load(content)

整体思路可以参考往期文章:

经验分享 程序员 微信小程序 职场和发展