网页爬虫抓取百度图片(爬取百度贴模块详细解析(一)_社会万象_光明网 )
优采云 发布时间: 2022-02-05 23:19网页爬虫抓取百度图片(爬取百度贴模块详细解析(一)_社会万象_光明网
)
目录概览
爬取*敏*感*词*每篇博文的所有图片。
准备所需模块,涉及知识点,运行效果
控制台打印:
计算机本地文件:
完成爬虫1.分析网页
打开*敏*感*词*搜索关键字,这里的例子是python,也可以是其他关键字
分析前三个页面的url,得到:
# 第1页:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
# 第2页:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
# 第3页:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=100
# 比较三者三者可以得出每一页的网址公式:
# "http://tieba.baidu.com/f?kw="+tieba_name+"&ie=utf-8&pn="+(page_index-1)*50
# 其中tieba_name是你要搜索的贴吧名字,page_index是你要搜索的第几页
得到每个页面的URL后,下一步就是分析每个帖子在特定页面上的链接:
已经可以通过页面的 URL 请求源代码。在源码中,可以通过xpath表达式提取出一串数字,然后组装出具体帖子页面的URL。
点击帖子进入具体页面,索取源码然后提取图片链接:
这样想:
首先根据贴吧的名字获取贴吧的URL,然后组装各个页面的URL,然后根据各个页面的URL请求页面的HTML源代码,然后在源码中提取每个帖子的URL超链接信息,然后组装帖子每个具体页面的URL,然后请求帖子具体页面的HMTL源代码,提取图片的超链接,然后根据图片的超链接下载图片。
2.爬虫代码
import urllib.parse
import urllib.request
from lxml import etree
# 爬虫实践:爬取*敏*感*词*的图片
class Spider():
def __init__(self):
self.tiebaName = "java"
self.pageNumber = 3
self.url = "http://tieba.baidu.com/f?"
self.fileName = 1
def tiebaSpider(self):
"""构造URL"""
for page_index in range(1, self.pageNumber + 1):
pn = (page_index - 1) * 50
wo = {"pn": pn, "kw": self.tiebaName}
word = urllib.parse.urlencode(wo)
tieba_url = self.url + word
self.loadPage(tieba_url)
def loadPage(self, url):
"""爬取页面内容"""
req = urllib.request.Request(url)
data = urllib.request.urlopen(req).read()
html = etree.HTML(data)
links = html.xpath("//div[@class='threadlist_lz clearfix']/div/a/@href")
for link in links:
link = "http://tieba.baidu.com" + link
self.loadImages(link)
def loadImages(self, link):
"""爬取帖子详情页,获得图片的链接"""
req = urllib.request.Request(link)
data = urllib.request.urlopen(req).read()
html = etree.HTML(data)
links = html.xpath("//img[@class='BDE_Image']/@src")
for image_link in links:
self.writeImages(image_link)
def writeImages(self, imageslink):
"""通过图片的链接,爬取图片并保存在本地"""
print("正在存储图片:", self.fileName, "......")
image = urllib.request.urlopen(imageslink).read()
file = open(r"C:\\Users\\Administrator\\Pictures\\img\\" + str(self.fileName) + ".jpg", "wb")
file.write(image)
file.close()
self.fileName += 1
if __name__ == '__main__':
# 实例化Spider类
mySpider = Spider()
# 调用方法
mySpider.tiebaSpider()