Python爬虫使用requests库爬取表情包

最近在刚开始学习python网络爬虫,得出了一点点总结,并通过爬取表情包一例来深入了解(大佬请绕道)。

首先,确定电脑里有以下第三库:requests,os,time和lxml。如果没有请自行安装,在终端输入指令,命令如下:
pip install ……(包名)

1,使用import导入第三方库,因为需要用到lxml库中的etree,所以使用from …… import …… 进行导入,如图所示:

import requests
import os
import time
from lxml import etree

2,定义一个函数要来获取网页内容,首先制定请求头headers,其内容用字典以键值对的形式保存,(制定请求头的原因是因为一些网站的反爬机制会通过请求头来确认是否可以对网站内容进行爬取)。接着确定文件编码格式,代码如下:

def getHtml(url):
    headers = {
        "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
    }
    r = requests.get(url,headers=headers)
    r.encoding = r.apparent_encoding
    return r.text

3,这时候,我们就要用到我们的lxml库了,首先使用etree.HTML()对网页代码进行整理,然后就可以通过xpath来匹配我们想要的到的内容啦。想对xpath了解更多见xpath使用教程

htmldoc = etree.HTML(getHtml(url))
result = htmldoc.xpath('//div/img/@src')

4,通过xpath筛选得到想要的图片连接后,下一步就是要对图片进行保存了,(对python文件写入还不熟悉的话,还需多了解一下)。这里使用迭代器对图片列表进行循环,并以二进制写入文件,文件名取链接最后一个“ / ”之后的字符。代码如下:

for url in result:
    time.sleep(1)
    file_name = url[-5:]
    pic = requests.get(url)
    with open('E:/python/resource/叮当猫' + '/' + file_name, 'wb') as wf:
        wf.write(pic.content)

这样我们就得到想要的表情包了,怎么样是不是很简单呢。爬取结果如下图:
在这里插入图片描述

附上源代码:

# -*- coding: utf-8 -*-
import requests
import os
import time
from lxml import etree

# 获取网页源代码
def getHtml(url):
    try:
        headers = {
            "User-Agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
        }
        r = requests.get(url,headers=headers)
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("error")


url = 'http://www.dtzhuanjia.com//detail.php?type=xiaodingdang'
xpath_rule = '//div/img/@src'


# 利用etree与xpath处理代码
htmldoc = etree.HTML(getHtml(url))
result = htmldoc.xpath('//div/img/@src')
for url in result:
    time.sleep(1)
    file_name = url.split('/')[-1]
    pic = requests.get(url)
    # 以二进制写入
    with open('E:/python/resource/叮当猫' + '/' + file_name, 'wb') as wf:
        wf.write(pic.content)
        

如有错误,欢迎私信纠正,谢谢支持!

猜你喜欢

转载自blog.csdn.net/qq_47183158/article/details/107426948