入门爬虫

    科技2022-07-10  97

    背景

    发现最近跟不上网络时代了

    我竟然连斗图都斗不过别人…岂有此理!

    不就是图片么,电脑可以解决的都不是事,想到可以用爬虫去爬取图片,那么开搞!

    分析url

    众所周知,百度贴吧是表情包最多个地方,那么我就从百度贴吧入手。 URL:https://tieba.baidu.com/f?ie=utf-8&kw=表情包&fr=search 先从这个url入手,看到这么多【%】,几乎是url加密,先去解码一下。 【?】问号后面的是参数,“ie=uft-8” 页面编码 “kw=表情包” 是贴吧的搜索,“fr=search” 意思是来至于搜索 简化一下这个URL还是能正常搜索的。 https://tieba.baidu.com/f?kw=表情包 然后就是找页面内的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 保存在本地,下一期再开始爬取图片内容。这个脚本算是的认识爬虫用的,简略了很多东西,甚至连请求头部都不伪造。最多最多只能算是一个爬虫的入门篇。

    Processed: 0.011, SQL: 8