入门爬虫_百度贴吧

背景

发现最近跟不上网络时代了
在这里插入图片描述

我竟然连斗图都斗不过别人…岂有此理!![在这里插入图片描述](https://img-blog.csdnimg.cn/20201003152217753.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5MjQxOTQ4,size_16,color_FFFFFF,t_70#pic_center

不就是图片么,电脑可以解决的都不是事,想到可以用爬虫去爬取图片,那么开搞!在这里插入图片描述

分析url

众所周知,百度贴吧是表情包最多个地方,那么我就从百度贴吧入手。
URL:https://tieba.baidu.com/f?ie=utf-8&kw=%E8%A1%A8%E6%83%85%E5%8C%85&fr=search
先从这个url入手,看到这么多【%】,几乎是url加密,先去解码一下。在这里插入图片描述
【?】问号后面的是参数,“ie=uft-8” 页面编码 “kw=表情包” 是贴吧的搜索,“fr=search” 意思是来至于搜索
简化一下这个URL还是能正常搜索的。
https://tieba.baidu.com/f?kw=%E8%A1%A8%E6%83%85%E5%8C%85
然后就是找页面内的url,这里我用的是 xpach 插件搜索出 a 标签的地址 href。(需要小伙伴去查看一下xpach的语法)在这里插入图片描述

在这里插入图片描述
还要获取下一页地址的url
在这里插入图片描述

代码实现

import requests
from lxml import etree
import json

class Tieba:
    def __init__(self,name):
        self.url = "https://tieba.baidu.com/f?kw="+name   
        self.home = "https://tieba.baidu.com"
        self.page = 1
        self.name = "tieba_"+name
    def get_url_list(self,html_str): #获取URL构成列表
        content_list = []
        html = etree.HTML(html_str)
        next_url = html.xpath("//a[(@class='next pagination-item ')]/@href")[0] if len(html.xpath("//a[(@class='next pagination-item ')]/@href"))>0 else None   
        node_list = html.xpath("//a[contains(@class, 'j_th_tit')]") #每一页的所有url节点
        print("第" + str(self.page) + "页url")
        for node in node_list:
            content = {"url":self.home+node.xpath("./@href")[0],
                       "title":node.xpath("./@title")}
            print(content)
            content_list.append(content)
        if next_url is None:
            print("已经搜索到最后一页了")
            return content_list, next_url
        print("下一页url:"+"https:"+next_url)
        self.page = self.page+1
        return content_list,"https:"+next_url

    def parse_url(self,url):  #发送请求
        res = requests.get(url)
        return res.content.decode()

    def sava_content(self,content_list):  #保存在本地
        with open(self.name+".txt","a",encoding="UTF-8") as f:
            for content in content_list:
                f.write(json.dumps(content,ensure_ascii=False))
                f.write("\n")

    def run(self):
        next_url = self.url
        while next_url is not None:
            html_str = self.parse_url(next_url)
            content_list,next_url = self.get_url_list(html_str)
            self.sava_content(content_list)

if __name__=='__main__':
    name = "表情包"  #所要爬取贴吧的名字
    t = Tieba(name)
    t.run()

结尾

这期是简单的获取到 url 保存在本地,下一期再开始爬取图片内容。这个脚本算是的认识爬虫用的,简略了很多东西,甚至连请求头部都不伪造。最多最多只能算是一个爬虫的入门篇。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值