python爬取两个网站_python-2:爬取某个网页(虎扑)帖子的标题做词云图

关键词:requests,BeautifulSoup,jieba,wordcloud

整体思路:通过requests请求获得html,然后BeautifulSoup解析html获得一些关键数据,之后通过jieba分词对数据进行切分,去停,最后通过wordcloud画词云图

1、请求虎扑Acg区

从这里可以得知,如果我们要请求多个网页,只需要以首页作为基础url,后面的每一页在首页的url基础上进行添加即可。引入requests库进行请求

base_url = r'https://bbs.hupu.com/acg'add_url= ''content_str= ''

#尝试请求15个网页

for i in range(1, 15):if i != 1:

add_url= r'-{}'.format(i)else:

add_url= ''url= base_url +add_url

response= requests.get(url)

2、BeautifulSoup解析

打开浏览器的控制台,观察网页源码,寻找需要获得的数据的标签。我们需要获取一个帖子的标题,通过浏览网页源码可以发现帖子的标题在一个标签中,且class=“truetit”,通过这两个信息我们就可以通过BeautifulSoup获取一个帖子的标题了。

1761118-20190808145135562-1266398535.png

base_url = r'https://bbs.hupu.com/acg'add_url= ''content_str= ''

for i in range(1, 15):if i != 1:

add_url= r'-{}'.format(i)else:

add_url= ''url= base_url +add_url

response=requests.get(url)#引入BeautifulSoup

soup = BeautifulSoup(response.text, "lxml")#找标签,class = ‘truetit’

all_title = soup.find_all("a", class_="truetit")for title inall_title:

content_str+= title.text

需要注意的是,

all_title = soup.find_all("a", class_="truetit")

会把当前网页的所有标题都读出来,且格式是一个以标签为元素的list,通过for遍历这个list,对每一个,调用title.text即可以获得帖子的标题。

print一下,查看是不是获得了想要的结果:

1761118-20190808150344679-1269810881.png

可以看到我们已经获得了我们想要的标题,下一步就是数据处理了(jieba分词+去停)

3、jieba分词+去停用词

先写一个生成停用词表的函数

#引入停用词表

defstopwordslist(filepath):

stopwords= [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords

再进行jieba分词,去停使用的是哈工大停用词表

#用lcut使得分词后为一个list

s_list =jieba.lcut(content_str)

out_list=[]#引入停用词表

stopwords = stopwordslist(r'E:\stopwords-master\哈工大停用词表.txt')for word ins_list:if word not instopwords:if word != '\t':

out_list.append(word)

out_str= " ".join(out_list)

到这一步,就可以获得分词后的关键词了。下一步就是画词云图了。

4、画词云图

引入wordcloud,font_path是字体的路径,不导入的话可能只会显示一些框框,具体文字下载可以去网上找。mask是背景图片。generate()里的是string类型的数据。

alice_mask = plt.imread(r'D:\壁纸\huge.jpg')#generate的是string类型的

word_cloud = WordCloud(font_path='msyh.ttc',mask=alice_mask,background_color='white', max_words=400, max_font_size=80).generate(out_str)

plt.figure(figsize=(15,9))

plt.imshow(word_cloud, interpolation="bilinear")

plt.axis('off')

plt.show()

5、结果展示

不引入mask参数:

1761118-20190808151804039-1351882724.png

引入mask参数:

1761118-20190808151918502-955557902.png

今天是8月8号,最近正好是巨人最新一话发布的时候,所以巨人的讨论度很高。同时一直支撑着虎扑acg区热度的海贼王讨论度也很高,其次的关键词还有 动画,动漫,龙珠,艾伦,漫画,情报等等。

6、需要改进的地方

(1)无关紧要的词太多了,需要自写停用词表进行去停。如最后结果中的“是不是”,“觉得”等,这些词都应该去掉

(2)引入mask的情况下,很多背景图使用了最后却没有展示出来。有的背景图可以,有的却不可以。

最后,感谢观看这篇博客。其中借鉴了许多网上的内容,感谢一些原作者的努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值