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()