爬虫-英文小说_分析
文章目录
研究背景
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
通俗来讲,假如你需要互联网上的信息,如商品价格,图片视频资源等,但你又不想或者不能自己一个一个自己去打开网页收集,这时候你便写了一个程序,让程序按照你指定好的规则去互联网上收集信息,这便是爬虫,我们熟知的百度,谷歌等搜索引擎背后其实也是一个巨大的爬虫。
爬虫合法吗?
一般来说只要不影响人家网站的正常运转,也不是出于商业目的,人家一般也就只会封下的IP,账号之类的,不至于法律风险。
文章的背景:(本文仅作学习交流)
爬取一篇英文文章,并对其进行分析。文章选择了简爱的小说,分析有词频分析,单词长度统计。附带中文的词云。
提示:以下是本篇文章正文内容,下面案例可供参考
一、相关原理
网络爬虫是一个自动提取网页的程序,它为
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1)对抓取目标的描述或定义;
(2)对网页或数据的分析与过滤;
(3)对
文章采用的环境:
python 3.9 + bs4 + jieba + matplotlib + wordcloud + PIL + numpy + urllib
还需要一些前端知识来解析html文本。
具体原理见后。
二、设计思想
寻找目标 -》 爬取 -》 保存 -》分析
二、实现过程
1.分析页面
1.爬虫目标
2.页面的分析
3.章节的URL
第一章:
第二章:
第三章:
规律:
第i章的URL为:
由此可的,第28章的url为:
1975+28-1 = 2002
2.引入模块
3.获取数据
使用库函数,拼接url,循环访问网址,对爬取到的html进行解析,循环保存到txt文档中。
具体见源代码中的注释。
4.分析数据
具体见源代码中的注释。
5.词云
具体见源代码中的注释。
三、结果展示
1.英文文本
2.中文文本
3.词频及字母数的分析
4.词云
四、感想及此项目结构
项目中功能都完整实现,并进行了功能的封装,比如输出含有字母个数的单词数的函数(可以统计不是特定的数量的单词长度):
项目结构:
要注意的代码有:
1.# lambda x:x[0]给列表中元组 的(key)给sort排序,x:x[1]代表字典的值(values)给sort排序,reverse=true表示降序
2.# counts.get (word,0)+ 1 是指有word时返回其值,默认是0,+1能够累计次数;没有word时则返回0。
五、源代码
1 # -*- coding = utf-8 -*- 2 # @Time : 2022/1/3 11:35 3 # @Author : butupi 4 # @File : spider.py 5 # @Software : PyCharm 6 7 from bs4 import BeautifulSoup # 网页解析 8 import urllib.request, urllib.error # 指定URL 9 10 11 def main(): 12 # 爬取的url_base部分 13 baseurl = "https://www.24en.com/novel/classics/jane-eyre/" #1975-2002 14 # 爬取保存 15 getData(baseurl) 16 17 18 # 爬取网页 19 def getData(baseurl): 20 #简爱一共28章 21 for i in range(0, 28): 22 #完整的URL,url起始 的数字是1975,每章的url都是在此基础上加1 23 url = baseurl + str(1975+i)+".html" # 换页读取 24 #访问网页 25 html = askURL(url) # 保存获取到的源码 26 # 解析 保存 27 soup = BeautifulSoup(html, "html.parser") 28 with open("wbfx.txt", "a+", encoding="utf-8") as f: 29 f.writelines("\n Chapter"+str(i+1)+" \n") 30 for item in soup.find_all("div", class_="chapter-lan-en toleft"): # 查找符合要求的字符串 31 for p in item.p.children: 32 f.writelines(p.string.replace(u'\xa0', '')) 33 with open("简爱.txt", "a+", encoding="utf-8") as f: 34 f.writelines("\n 第" + str(i+1) + "章 \n") 35 for item in soup.find_all("div", class_="chapter-lan-zh toright"): # 查找符合要求的字符串 36 for p in item.p.children: 37 f.writelines(p.string.replace(u'\xa0', '')) 38 39 40 # 爬取指定URL网页信息 41 def askURL(url): 42 #包装request请求头 43 head = { 44 "User-Agent": "Mozilla / 5.0 AppleWebKit " #... 45 } 46 request = urllib.request.Request(url, headers=head) 47 #保存爬取到的网页 48 html = "" 49 try: 50 response = urllib.request.urlopen(request) 51 html = response.read().decode("utf-8") 52 #print(html) 53 #异常处理 54 except urllib.error.URLError as e: 55 if hasattr(e, "code"): 56 print(e.code) 57 if hasattr(e, "reason"): 58 print(e.reason) 59 return html 60 61 62 if __name__ == "__main__": 63 main() 64 print("爬取完毕")
















浙公网安备 33010602011771号