前两部主要讲述咱们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信息,php
等于咱们已经只知道如何用工具去浏览和检索内容,可是实现只有你知道抓取的是什么,这时候html
咱们须要整理分类,给他们命名以及分类这样打印出来别人一看就知道标题是什么,内容是什么python
#!usr/bin/env python # -*- coding:utf-8 -*- from bs4 import BeautifulSoup import requests import json headers ={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', # 'Cookie':'CNZZDATA1260535040=242528197-1478672438-null%7C1478672438', } url= 'http://www.beiwo.tv/index.php?s=vod-search-id-14-tid--area--year-$search_year-order-gold.html' wb_data = requests.get(url,headers=headers) soup = BeautifulSoup(wb_data.text,'lxml') imgs = soup.select(" ul.img-list.clearfix > li > a > img ") titles = soup.select(" ul.img-list.clearfix > li > h5 ") yanyuans = soup.select(" ul.img-list.clearfix > li > p") stars = soup.select(" p.star > em") J_data = {} count = 0 for title,img,yanyuan,star in zip(titles,imgs,yanyuans,stars): data = { "title":title.get_text(), "img":img.get("src"), "演员":list(yanyuan.stripped_strings), "评分":star.get_text(), } J_data[count] = data count += 1 print(data) with open("test.txt",'w') as f: f.write(json.dumps(J_data))
我就直接把完整代码发出来一点点来讲:mysql
首先仍是标准格式导入相应方法这里我多加了json用来保存抓去的数据,就用来放入txt文件内sql
headers假装浏览器头文件简写方式,url是你抓去网页的地址(如今不少网站都有反爬保护愈来愈难爬取信息)数据库
requests请求网页服务返回的数据wb_data给BeautifulSoup去解析用lxml格式json
抓去的信息以下titles标题imgs图片yanyuans演员stars评分都加了s是由于返回的是抓去的每项所有相关信息以列表返回浏览器
J_data字典后面保存时的格式,count用来计数顺便用来当字典的Key键值,zip的方法我简单介绍以下:cookie
能够把两个列表同一位置的值一一对应以元组返回行成新列表的方法在这里我是用他来分类输出咱们抓去相应信息工具
最后用了经常使用的写入方法with能够不用写文件close关闭,处理完它会收拾后面操做,来看效果以下:
这里咱们整理全部想要的数据及分类,这样打印出来相信给其它人看也知道是什么,因为评分与演员放在一个标签下因此没有演员名时会有点BUG
在来看看txt文档内保存了什么以下:
不少人说报错乱码什么的,其实\u6f14就是中文只是用unicode的编码的格式写入文本若是你在反向读取仍是能够正常打印出来的(因为文件太长无法截取)
咱们就在新建一个py文件简单教一下如何读取文件内容代码以下:
#!/usr/bin/env python # -*- coding:utf-8 -*- import json with open('test.txt','r') as f: dic = json.loads(f.readline()) for i in range(len(dic)): print(dic[str(i)])
导入json的方法模块
打开文件test.txt模式r读取而且命名f (上面生成的test.txt目录是当前目录,也就是3个文件是放在一块儿的,若是要写在其它地方请写相对路径)
因为只有一行因此f.readline()读取刚才你们看到unicode编码的文件以json.load的方式读取,你是以json.dumps写入因此读取相应,返回的类型字典dic
用一个循环来经过字典的key来看到value就是刚才的内容效果以下:
目前已经把基本的BeautifulSoup的基础用法方法讲完了,其实还能够作不少扩展好比把抓去的数据存入mysql或其它数据库等,写入xls表格,因为我这里主要介绍BeautifulSoup,没有介绍到,可是能够作就当扩展练习吧
你们能够去学习数据库的基本用法和语句在结合这个爬去存放,也能够学习python表格的第三方模块把数据写入excel内这样也能够显得更加专业。最后仍是提醒只有多练习才能熟练运用这些工具,而且发现问题,
思考,解决与提升。最后也感谢能观看到此的同窗和朋友们,我也会随后时不时更新讲解更好用的库与方法。