背景
发现最近跟不上网络时代了
我竟然连斗图都斗不过别人…岂有此理!
不就是图片么,电脑可以解决的都不是事,想到可以用爬虫去爬取图片,那么开搞!
分析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
):
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')]")
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 保存在本地,下一期再开始爬取图片内容。这个脚本算是的认识爬虫用的,简略了很多东西,甚至连请求头部都不伪造。最多最多只能算是一个爬虫的入门篇。