[原创]论坛悬赏区的爬取和分析,了解高频问题更好挣CB
本帖最后由 天空宫阙 于 2019-3-9 20:43 编辑入门级网页爬虫的简单应用,大神就不用看了
先放结果
这是我爬取了论坛悬赏区,200页一共一万条标题的词频分析。
结果表明论坛的小伙伴的高频问题是:求视频(下载),教程,下载(文件,文库),(破解)软件,工具,源码,模板等等
对这些方面有一技之长的大佬就很容易挣到CB。
实现思路
注意事项:
1.python版本:python3.7
2.自行pip3 install 代码中import的相关库(部分库不能通过pip成功安装的自行百度)
wuai_statistics.py中的代码
import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
import re
import time
#请求头的修改
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
#请求一个网页
def get_html(url):
try:
response = requests.get(url,headers=headers)
response.raise_for_status()
#print(response.apparent_encoding)
response.encoding = 'GB2312'
return response.text
except:
print('请求失败')
def parse_html(html):
soup = BeautifulSoup(html, "lxml")
thread = soup.select('#threadlisttableid')
tbodys = thread.find_all(id = re.compile('normalthread'))
for tbody in tbodys:
title = tbody.select('a').string
try:
with open('wuai_statistics.txt', 'a', encoding='utf-8') as f:
f.write(title+'\n')
f.close()
except:
continue
def main(page):
url='https://www.52pojie.cn/forum.php?mod=forumdisplay&fid=8&specialtype=reward&filter=specialtype&specialtype=reward&rewardtype=1&page='+str(page)
html = get_html(url)
parse_html(html)
if __name__ == '__main__':
for page in range(1,201):
print('正在保存第'+str(page)+'页')
main(page)
print('成功')
wordcloud_jieba.py中代码
import numpy as np
from PIL import Image
import re
import jieba
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
importmatplotlib.pyplot as plt
# 打开存放项目名称的txt文件
with open('wuai_statistics.txt','r',encoding='utf-8') as f:
word= (f.read())
f.close()
'''
# 图片模板和字体
image=np.array(Image.open('ditu.jpg'))
'''
font=r'C:\\Windows\\fonts\\msyh.ttf'
# 去掉英文,保留中文
resultword=re.sub("\.\<\>\/\?\~\。\@\#\\\&\*\%]", "",word)
wordlist_after_jieba = jieba.cut(resultword)
wl_space_split = " ".join(wordlist_after_jieba)
# 设置停用词
sw = set(STOPWORDS)
sw.add("一个")
sw.add("求个")
sw.add("可以")
sw.add("怎么")
sw.add("如何")
sw.add("求助")
sw.add("一份")
sw.add("或者")
sw.add("有没有")
sw.add("一款")
sw.add("帮忙")
# 关键一步
my_wordcloud = WordCloud(scale=4,font_path=font,stopwords=sw,background_color='white',
max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)
#显示生成的词云
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
#保存生成的图片
my_wordcloud.to_file('result.jpg')
使用方法:
1.运行wuai_statistics.py爬取悬赏区标题200页(为了防止对网站服务器造成不必要的压力就不爬很多)保存到txt中
2.运行wordcloud_jieba.py对txt文件中的文字进行分析,采用jieba对汉字进行分词,wordcloud进行词频统计(wordcloud和jieba我这边是不能进行pip自动安装的或者说速度特别慢,安装方法请自行百度),生成本帖最上面的图片
3.wordcloud_jieba.py中设置的停用词也是高频出现的,因为没有实际含义所以不统计在内。
源码已经放上了
但土豪大佬可以下载一下源码文件
帮忙,免费评分!
受到启发本版块‘’编程语言区‘’标题的词频统计如下(只爬了20页不是很准确):发现爬虫还是挺受到欢迎的。ps:代码中的css选择器要稍加修改,英文的屏蔽去掉,其他都不变 本帖最后由 天空宫阙 于 2019-3-9 14:30 编辑
wuai_statistics.py中的time库没有用到可以删掉,在调试功能的时候忘去掉了 说不定过几天,"以上词语均被视为水帖屏蔽词“ ←_← Ganlv 发表于 2019-3-9 14:26
说不定过几天,"以上词语均被视为水帖屏蔽词“ ←_←
因为是悬赏区出现这些词语也无可厚非啊,不过你也提醒我了,改一下开始的url也可以统计其他版块的词频 __name__ == '__main__有什么用?看了解释还是有点不懂 等待雨的故事 发表于 2019-3-9 15:36
__name__ == '__main__有什么用?看了解释还是有点不懂
https://www.jianshu.com/p/234e9d3dbc30
一般情况下在我们开发时,这个模拟main函数/方法中,会有两个作用,一是用来编写测试代码,二是用来规范程序入口
此处去掉问题也不大,简单来说就是代码规范 天空宫阙 发表于 2019-3-9 16:18
https://www.jianshu.com/p/234e9d3dbc30
一般情况下在我们开发时,这个模拟main函数/方法中,会有两 ...
现在说还是不懂,等我以后用到在理解就好点。我现在只学了爬虫前面的部分 天空宫阙 发表于 2019-3-9 16:18
https://www.jianshu.com/p/234e9d3dbc30
一般情况下在我们开发时,这个模拟main函数/方法中,会有两 ...
这个不是代表主函数吗
页:
[1]