本次任务为:
把搜下来的网页进行聚类,将聚类结果显示给用户。用户可以选择其中一个类,标位关注,类的关键词作为主体,用户就可以跟踪这个主题,了解主题。
deadline:11.09
任务解析:
基本任务:将网页进行聚类,分别根据其类别进行存档,图片放到相应的文件夹,文本放到相应的文件中。
提升任务:对网页进行持续跟踪,将符合条件的文件,持续下载。
编译环境综述:
- 操作系统:win 10 专业版
- 编译环境: Python 3.6
- 编辑环境:Spyder
如果想省事,可以从睿思直接下载Anaconda Navigator,安装后,可以直接用,封装好的。
话不多说,先贴代码:
################################################# # 网页爬虫 # Email : jtailong@163.com ################################################# import re import time import urllib.request import requests from bs4 import BeautifulSoup #添加网页 url = 'https://www.douban.com/' #将图片抓取,并打包 req = urllib.request.urlopen(url) data = req.read().decode('utf-8') match = re.compile("data-origin=\"(.+?\.jpg)") #j记录图片信息 f = open('D:\\P\图片下载记录.txt', 'w+') for sj in match.findall(data): try: f.write(sj) except: print("fail") f.write('\n') f.close() f1 = open('D:\\P\Pic_information.txt', 'r+') #开始抓取网页图片 x = 0 for lj in f1.readlines(): img = urllib.request.urlretrieve(lj, 'D:/P/%s.jpg' % x) x += 1 f1.close() #将网页上所有的文字信息,记录到TXT文件当中 r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') content = soup.text print (content) file = open('D:\\P\网页上所有文字信息.txt', 'w', encoding='utf-8') file.write(content) file.close()
编译效果对比:
上图为:原网页;下图为:经过抓取,可以在文件夹中看到信息。
更新:
通过这次编程,我对爬虫的理解就是:
- 通过网络传输协议(http),将服务器上的文本,文字等下载到本地
- 爬虫解析(正则表达式)
- 将类别重新分配到你的文件夹(图片保存,文本保存到TXT)当中的一个过程
如果想要系统的学习,或者更好的理解代码,请参考
http://cuiqingcai.com/1052.html
献丑了。
方法二:
通过跟同学交流,发下,第一个代码的鲁棒性差一些,再次运行会出现错误。这里,给出第二种编译方式
import urllib.request,socket,re,sys,os import re import time import urllib.request import requests from bs4 import BeautifulSoup #定义文件保存路径 targetPath = "D:\\P" def saveFile(path): #检测当前路径的有效性 if not os.path.isdir(targetPath): os.mkdir(targetPath) #设置每个图片的路径 pos = path.rindex('/') t = os.path.join(targetPath,path[pos+1:]) return t #用if __name__ == '__main__'来判断是否是在直接运行该.py文件 # 网址,向网站请求数据,并返回到本地,将这些数据读取到data中 url = "https://www.douban.com/" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36' } #上面这行,是用来伪装成浏览器,防止被网站diss req = urllib.request.Request(url=url, headers=headers) res = urllib.request.urlopen(req) data = res.read() #对读取到本地的数据进行解析,通过后缀,匹配相应的图片 并保存 for link,t in set(re.findall(r'(https:[^s]*?(jpg|png|gif))', str(data))): print(link) try: urllib.request.urlretrieve(link,saveFile(link)) except: print('失败') #将网站的文本信息解析,并保存到相应的TXT文本当中 r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') content = soup.text print (content) file = open('D:\\P\网页上所有文字信息.txt', 'w', encoding='utf-8') file.write(content) file.close()
这次效果为:
其中txt文件的效果为:
欢迎大家讨论。