8586231_192932724000_2.jpg
#百度贴吧图片爬虫
# 爬取步骤:1.基础设置,2.构造url,3.爬取页面,4.解析页面,5.保存页面
# 采取urllib爬取
#引入必要的包
import urllib
import urllib.request
from lxml import etree
#定义一个类存入必要的基础数据
class Spider():
def __init__(self):
self.beginpage=1
self.endpage=3
self.tiebaname='java'
self.url="http://tieba.baidu.com/f?"
self.headers={"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}
self.filename=1
#定义构造url的函数
def tiebaSpider(self):#驼峰命名法
for i in range(self.beginpage,self.endpage+1):
#分析网页
#第二页http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=50
#第三页http://tieba.baidu.com/f?kw=java&ie=utf-8&pn=100
#构造get请求参数
pn=(i-1)*50
wd={'pn':pn , 'kw':self.tiebaname}
word=urllib.parse.urlencode(wd)
#拼接完整的url
urll=self.url+word
#调用爬取页面函数
self.loadPage(urll)
#定义爬取页面url
def loadPage(self,url):
response=urllib.request.Request(url,headers=self.headers)
data=urllib.request.urlopen(response).read()#返回2进制形式的页面信息
# print(data)
#用xpath前期处理出链接信息拼接帖子的地址
html=etree.HTML(data)
#
#
links=html.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href')
for link in links:
# print(link)
#拼接url
link="http://tieba.baidu.com"+link
# 调用解析页面函数
self.loadImage(link)
#定义图片解析链接的函数
def loadImage(self,link):
req=urllib.request.Request(link,headers=self.headers)
data1=urllib.request.urlopen(req).read()
html=etree.HTML(data1)
#用xpath表达式解析出图片
#其中一个图片的网页信息
#
imagelinks=html.xpath('//img[@class="BDE_Image"]/@src')
for imagelink in imagelinks:
#调用保存图片函数,将解析出的图片存入本地
self.writeImage(imagelink)
def writeImage(self,imagelink):
print("正在保存图片",self.filename,"-------------------")
image=urllib.request.urlopen(imagelink).read()
with open(r"E:\img\\"+str(self.filename)+".jpg","wb") as f:
f.write(image)
self.filename+=1
#最后调用执行整个代码
if __name__=='__main__':
spider=Spider()
spider.tiebaSpider()
......
正在保存图片 137 -------------------
正在保存图片 138 -------------------
正在保存图片 139 -------------------
正在保存图片 140 -------------------
正在保存图片 141 -------------------
正在保存图片 142 -------------------
正在保存图片 143 -------------------
......