python用BeautifulSoup库简单爬虫实例分析
会用到的功能的简单介绍
1、frombs4importBeautifulSoup
#导入库
2、请求头herders
headers={'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/57.0.2987.110Safari/537.36','referer':"www.mmjpg.com"}
all_url='http://www.mmjpg.com/'
'User-Agent':请求方式
'referer':从哪个链接跳转进来的
3、建立连接
start_html=requests.get(all_url,headers=headers) all_url:起始的地址,也就是访问的第一个页面 headers:请求头,告诉服务器是谁来了。 requests.get:一个方法能获取all_url的页面内容并且返回内容。
4、解析获取的页面
Soup=BeautifulSoup(start_html.text,'lxml') BeautifulSoup:解析页面 lxml:解析器 start_html.text:页面的内容
5、处理获取的页面
all_a=Soup.find('div',class_='pic').find_all('a')[-2]
Soup.find()查找某一个
find_all()查找所有的,返回一个列表
.find('img')['src']:获取img的src链接属性
class__:获取目标的类名
div/a:类型条件为div/a的
[-2]可以用来去掉最后多匹配的标签,这里表示去掉最后两个a标签
6、获取目标内容
内容 a[i]/get_text():获取第i个a标签里面的内容
7、可能用到的其他功能介绍:
1、文件夹创建与切换
os.makedirs(os.path.join("E:\name",filename))
#在目录E:\name下创建名为filename的文件夹
os.chdir("E:\name\\"+filename)
#切换工作路径到E:\name\filename下
2、文件保存
f=open(name+'.jpg','ab')##写入多媒体文件必须要b这个参数! f.write(img.content)##多媒体文件要是用conctent! f.close()
案例:爬取妹纸图
importrequests
frombs4importBeautifulSoup
importos
#导入所需要的模块
classmzitu():
defall_url(self,url):
html=self.request(url)##
all_a=BeautifulSoup(html.text,'lxml').find('div',class_='all').find_all('a')
forainall_a:
title=a.get_text()
print('------开始保存:',title)
path=str(title).replace("?",'_')##替换掉带有的?
self.mkdir(path)##调用mkdir函数创建文件夹!这儿path代表的是标题title
href=a['href']
self.html(href)
defhtml(self,href):##获得图片的页面地址
html=self.request(href)
max_span=BeautifulSoup(html.text,'lxml').find('div',class_='pagenavi').find_all('span')[-2].get_text()
#这个上面有提到
forpageinrange(1,int(max_span)+1):
page_url=href+'/'+str(page)
self.img(page_url)##调用img函数
defimg(self,page_url):##处理图片页面地址获得图片的实际地址
img_html=self.request(page_url)
img_url=BeautifulSoup(img_html.text,'lxml').find('div',class_='main-image').find('img')['src']
self.save(img_url)
defsave(self,img_url):##保存图片
name=img_url[-9:-4]
img=self.request(img_url)
f=open(name+'.jpg','ab')
f.write(img.content)
f.close()
defmkdir(self,path):##创建文件夹
path=path.strip()
isExists=os.path.exists(os.path.join("E:\mzitu2",path))
ifnotisExists:
print('建了一个名字叫做',path,'的文件夹!')
os.makedirs(os.path.join("E:\mzitu2",path))
os.chdir(os.path.join("E:\mzitu2",path))##切换到目录
returnTrue
else:
print(path,'文件夹已经存在了!')
returnFalse
defrequest(self,url):##这个函数获取网页的response然后返回
headers={
'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/57.0.2987.110Safari/537.36',
'referer':#伪造一个访问来源"http://www.mzitu.com/100260/2"
}
content=requests.get(url,headers=headers)
returncontent
#设置启动函数
defmain():
Mzitu=mzitu()##实例化
Mzitu.all_url('http://www.mzitu.com/all')##给函数all_url传入参数
main()