今天完成了python爬虫作业,但并不是一帆风顺,在写的过程中还是遇到了很多问题:
#基本问题
- 关于包的引入,python的确是个非常灵活的语言,主要体现在他强大的包上,要实现某个功能,基本上调用几个包就能实现一些用传统语言编写很麻烦的功能,非常方便。
- 关于python的编码,我用的是pycharm,感觉编码方式的调整很奇怪,我用utf-8竟然识别不了中文,希望大佬指点,个人也没去深究,因为已经有了一些解决方案,在文件的第一句加入# -- coding: yourcode --,就可以改变这个文件的编码方式
- 在coding过程中,最后做词云分析和数据可视化展示的时候,碰到了一些常见的问题,一开始是导入wordcloud包不成功,因为我是在pycharm中的终端里输入的命令,我点自动提示里的install也没用,下不了,最后我直接打开windows的cmd,输入pip install wordcloud,没想到直接配置好了,速度还贼快,惊喜,而且还给我自动配置了其他配套的模块,属实惊喜
- 词云分析和可视化展示的第二个问题是字体的问题,因为wordcloud词云分析默认字体是不支持中文的,得自己去找中文字体,不过还好我们电脑本身就有支持中文的字体,名称是simhei.ttf,直接win+r,然后输入fonts,然后找到这个字体,复制他的完整路径即可,不然输出的图片上没有文字,只有小框框,当然你也可以自己去找其他支持中文的字体,我只是为了偷懒而已
- 成果图,一个小作业而已,没细搞
下面展示一些源代码:
爬取相关链接:
// bug.py
// An highlighted block # -*- coding: gbk -*- import requests import re from urllib.parse import quote from bs4 import BeautifulSoup #爬取各大城市本地宝链接 def getRes(city_url_list): #对网页发送请求 url = "http://m.bendibao.com/city.php" html = requests.get(url = url) html.encoding = 'gbk2312' soup = BeautifulSoup(html.text,"html.parser") soup = soup.find_all("a") city_all_list = {} #首先爬取所有城市的链接,保存到字典city_all_list中 for i in soup: if i.has_attr('href'): city_all_list[i.text] = i["href"] extraStr = ['移动版','电脑版','意见建议'] #保存字典里所有城市及链接到txt file = open("AllCIties.txt","w+") for i in city_all_list.keys(): s = str(i) + " " + str(city_all_list[i]) if (str(i) < 'A' or str(i) > 'Z' and str(i) not in extraStr): file.write(s+'n') #关闭文件 file.close() #一线城市列表 city_name_list = ["北京","上海","广州", "成都","杭州","重庆","西安","苏州", "武汉","南京","天津","郑州","长沙", "东莞","佛山","青岛","沈阳"] #只保留各大城市url for city in city_name_list: city_url_list.append(city_all_list[city]) print("人才落户各大城市链接:") for city in city_url_list: print(city) saveFile("CitiesList.txt",city_url_list) #爬取各城市本地宝搜索链接 def query(city_url_list): #存放搜索链接 query_url_list = [] n = 0 #分别对各城市的本地宝链接进行请求,以获取搜索链接 print("各城市本地宝搜索url:") for i in city_url_list: html = requests.get(url = i) soup = BeautifulSoup(html.text,"html.parser") soup = soup.select(".search") queryKey = quote("人才落户最新") query = soup[0]["href"] #拼接搜索关键词 query_url = query.split("?")[0] + "?q="+ queryKey + "&click=1&" + query.split("?")[1] + "&nsid=" query_url_list.append(query_url + 'n') print(query_url_list[n]) n += 1 saveFile("Cities_search_list.txt",query_url_list) return query_url_list #获取详情页链接 def title(query_url_list): #各城市人才落户政策文章链接列表 title_url_list = [] n = 0 #通过之前拼接的搜索url来爬取各地城市人才落户最新文章 for i in query_url_list: html = requests.get(url = i) soup = BeautifulSoup(html.text,"html.parser") #匹配时加入了属性 soup = soup.select('.c-title a[cpos="title"]') titleurl = soup[0]["href"] title_url_list.append(titleurl + 'n') print(title_url_list[n]) n += 1 saveFile("TitleUrlList.txt",title_url_list) #保存文件 def saveFile(filename,text): f = open(filename, 'w',encoding = 'utf-8') for t in text: if len(t) > 0: f.writelines(t + "n") f.close() def main(): city_url_list = [] # 最终所有一线城市落户链列表 getRes(city_url_list) query_url_list = query(city_url_list) title(query_url_list) main()
将政策具体内容爬取到本地txt文件,并进行数据清洗
//writting.py
// An highlighted block from bs4 import BeautifulSoup import requests page = requests.get(url = 'http://wh.bendibao.com/live/202078/113158.shtm') page.encoding = 'GBK2312' soup = BeautifulSoup(page.text,'html.parser') fp = open('./武汉人才引进政策.txt','a',encoding='utf-8') result = soup.find_all(attrs={'class':'title daoyu'}) result = soup.select('div > h1 > strong') fp.writelines(result[0].text+'n') result = soup.find_all(class_='time') fp.writelines(result[0].text+'n') result = soup.select('.content') soup = BeautifulSoup(str(result[0]),'html.parser') i = soup.find('p') fp.writelines(i.text+'n') for i in soup.p.next_siblings: if i.name == 'div': break fp.writelines(i.text+'n') s = i.find('a') if s != None: fp.writelines(s['href']+'n') fp.close()
词云展示 DataShow.py。
// A code block var foo = 'bar';
// An highlighted block import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba.analyse import re #读取爬虫保存下载的数据 file_text = open('武汉人才引进政策.txt', 'r',encoding='utf-8').read() #使用jieba来处理剪切我们爬取文本内容 cut_text = jieba.lcut(file_text) #以空格分隔cut_text df = ' '.join(cut_text) #提取关键词 tags = jieba.analyse.extract_tags(df, topK=50) #关键词结果 result = ' '.join(tags) #使用词云进行数据可视化 wc_cloud = WordCloud( font_path='C:WindowsFontssimhei.ttf', #字体的路径,使用支持中文的simfei.tff字体 background_color='white', #背景颜色 width=1200, height=600, max_font_size=150, #字体的大小 min_font_size=30, #字体的大小 max_words=10000 ) #生成词云 wc_cloud.generate(result) wc_cloud.to_file('result.png') #图片保存 #图片展示 plt.figure('result_img') #图片显示的名字 plt.title('wuhan') plt.imshow(wc_cloud) plt.axis('off') plt.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)