Python 爬取贴吧中的图片

说明:
     ① 爬虫十分的简答,最难的点是xpath的使用,即:如何定位到每个网页上的照片的链接。
     ② 谷歌浏览器xpath插件 的使用是关键


1、首先,需要在“谷歌浏览器”中安装xpath插件:安装后的效果图
在这里插入图片描述

//div[@class="threadlist_lz clearfix"]//a[@class="j_th_tit "]/@href
查找过程:
	//  “任意目录”
	查找 class 属性值为 threadlist_lz clearfix 的 div 节点
	在上述查到的结果下,查找 class 属性值为 j_th_tit 的 a 节点
	取出 a 节点下面的 href 属性对应的值	

在这里插入图片描述

//img[@class="BDE_Image"]/@src
查找过程:
	//  “任意目录”
	查找 class 属性值为 BDE_Image 的 img 节点
	在 img 节点下,取出 BDE_Image 属性对应的值

在这里插入图片描述


2、然后,安装 lxml 模块,lxml中有xpath,其中,xpath的使用方法步骤

    request = urllib.request.Request(full_url)   # Request
    response = urllib.request.urlopen(request)   # urlopen
    html = response.read()                       # read

    content = etree.HTML(html)                   # HTML
    link_list = content.xpath('xpath匹配规则')    # xpath

3、实战代码

import urllib.request
from lxml import etree

def tiebaSpider(url,beginPage,endPage):
    for page in range(beginPage, endPage):
        pn = (page-1)*50
        fullurl = url + "&pn=" + str(pn)
        # print(fullurl)
        loadPage(fullurl)

def loadPage(fullurl):
    request = urllib.request.Request(fullurl)  # 形参:url,构造并返回一个对象Request
    response = urllib.request.urlopen(request) # 形参:对象Request,返回值:服务器的一个响应
    html = response.read()  # read():返回值—>服务器响应的HTML的全部内容,返回类型是字符串

    content = etree.HTML(html) # HTML()函数:解析HTML文档为HTML DOM模型
    # xpath():返回所有匹配成功的列表集合
    #    —> 在一整页帖子中,查找到“每个已发帖的链接”
    link_list = content.xpath('//div[@class="threadlist_lz clearfix"]//a[@class="j_th_tit "]/@href')
    # print(link_list)
    for link in link_list:
        full_url = "https://tieba.baidu.com" + link
        # print(full_url)
        queryImgLink(full_url) # 从网页full_url中抓取图像保存到本地

def queryImgLink(full_url):
    request = urllib.request.Request(full_url)
    response = urllib.request.urlopen(request)
    html = response.read()

    content = etree.HTML(html)
    # xpath()—> 在每个已发帖中,查找到“每个图片的链接”
    link_list = content.xpath('//img[@class="BDE_Image"]/@src')  # 保存了图片连接
    for link in link_list:
        # print(link)
        save_img(link)

def save_img(link):
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"}
    request = urllib.request.Request(link, headers=headers)
    image = urllib.request.urlopen(request).read()

    pos = link.rfind('/')  # rfind 从右向左查找char
    filename = link[pos+1:]
    # print(filename)

    with open(filename,"wb") as f:
        f.write(image)

if __name__=="__main__":
    url = "https://tieba.baidu.com/f"

    kw = input("请输入要爬取的贴吧名:")  # 获取键盘的输入数据
    new_kw = urllib.parse.quote(kw)  # 将url中的中文进行urlencode编码

    beginPage = int(input("请输入起始页码:"))
    endPage = int(input("请输入结束页码:"))

    url = url + "?kw=" + new_kw + "&ie=utf-8"
    # print(url)
    tiebaSpider(url, beginPage, endPage)  # 爬取图片
    
程序执行结果:
	请输入要爬取的贴吧名:美女
	请输入起始页码:1
	请输入结束页码:2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值