天空宫阙 发表于 2019-3-9 14:00

[原创]论坛悬赏区的爬取和分析,了解高频问题更好挣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:15

本帖最后由 天空宫阙 于 2019-3-9 14:30 编辑

wuai_statistics.py中的time库没有用到可以删掉,在调试功能的时候忘去掉了

Ganlv 发表于 2019-3-9 14:26

说不定过几天,"以上词语均被视为水帖屏蔽词“ ←_←

天空宫阙 发表于 2019-3-9 14:34

Ganlv 发表于 2019-3-9 14:26
说不定过几天,"以上词语均被视为水帖屏蔽词“ ←_←
因为是悬赏区出现这些词语也无可厚非啊,不过你也提醒我了,改一下开始的url也可以统计其他版块的词频

等待雨的故事 发表于 2019-3-9 15:36

__name__ == '__main__有什么用?看了解释还是有点不懂

天空宫阙 发表于 2019-3-9 16:18

等待雨的故事 发表于 2019-3-9 15:36
__name__ == '__main__有什么用?看了解释还是有点不懂

https://www.jianshu.com/p/234e9d3dbc30

一般情况下在我们开发时,这个模拟main函数/方法中,会有两个作用,一是用来编写测试代码,二是用来规范程序入口

此处去掉问题也不大,简单来说就是代码规范

等待雨的故事 发表于 2019-3-9 16:51

天空宫阙 发表于 2019-3-9 16:18
https://www.jianshu.com/p/234e9d3dbc30

一般情况下在我们开发时,这个模拟main函数/方法中,会有两 ...

现在说还是不懂,等我以后用到在理解就好点。我现在只学了爬虫前面的部分

zhoujinjian 发表于 2019-11-18 13:56

天空宫阙 发表于 2019-3-9 16:18
https://www.jianshu.com/p/234e9d3dbc30

一般情况下在我们开发时,这个模拟main函数/方法中,会有两 ...

这个不是代表主函数吗
页: [1]
查看完整版本: [原创]论坛悬赏区的爬取和分析,了解高频问题更好挣CB