Python爬取人民网文章标题

Python爬取人民网文章标题

兴趣点:

还是为了练手,开始想爬人民网主页的所有文章的,但是发现不同板块的页面结构不一样,有的页面还是论坛???我人晕了,最后改弄词云了,无奈╮(╯▽╰)╭

爬取网址:

传送门:http://www.people.com.cn/

爬虫大体思路和方法:

大体思路:
(1)这个页面相对简单,获取页面标签里的文本和链接就不说了
(2)利用jieba库的analyse自动分析方法拆分分析文本
(3)利用Wordcloud的方法实现词云

方法:
(1)页面获取方法:getHTMLText(url)
(2)获取新闻标题和链接的方法:fillList(html,newslist)
(3)利用jieba库和Wordcloud生成词云方法:getCloud(html,path)

参数介绍:
(1)newslist:存储新闻标题和对应链接的列表
(2)path:词云图本地存储路径

重难点介绍:

(1)关于jieba库和Wordcloud库:
这两个库在我之前学习计算机二级Python的时候就了解过并下载了,所以这里就不再介绍了

(2)join() 和 append() 方法的区别:
append是list(列表)的方法,函数参数是可以是任意一个元素,作用是在列表的最后添加上这个新元素
join是string(字符串)的方法,函数参数是一个由字符串组成的列表,作用是用字符串把这个字符串列表里的字符串连接起来

(3)jieba.analyse 和 textrank 简单用法:
传送门:https://www.cnblogs.com/1061321925wu/p/12518541.html

(4)Wordcloud方法与参数:
传送门:https://www.cnblogs.com/delav/articles/7837975.html

(5)wordcloud使之支持中文:
下载能够支持的字体即可:
SimHei字体:https://www.uslogger.com/details/3
注意是font_path,不是font;注意是font_path,不是font;注意是font_path,不是font;我自罚三杯

font_path = r"F:\Fonts\SimHei.ttf"

(6)plt.imshow() 与 plt.show() 区别:
plt.imshow():负责对图像进行处理,并显示其格式
plt.show():则是将plt.imshow()处理后的函数显示出来
plt.axis(‘off’):去掉图像的坐标轴

完整代码:

import requests
import re
import os
from bs4 import BeautifulSoup
import jieba.analyse
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def getHTMLText(url):
    try:
        kv = {"user-agent":"Mozilla/5.0"}
        r = requests.get(url,headers = kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("getHTMLText失败!")
        return ""

#获取新闻标题和链接的方法
def fillList(html,newslist):
    soup = BeautifulSoup(html, 'html.parser')
    for ul in soup.find_all("ul",class_ = "list14"):
        for li in ul.find_all("li"):
            for a in li.find_all("a"):
                newslist.append([a.text.strip(),a.get("href").strip()])
                print(a.text.strip() + "\t\t" + a.get("href").strip())

#利用jieba库和Wordcloud生成词云方法
def getCloud(html,path):
    soup = BeautifulSoup(html, 'html.parser')
    news_text = ""
    for news in soup.find_all("ul",class_ = "list14"):
        news_text = "".join(news.text.strip())
    result = jieba.analyse.textrank(news_text, topK=1000000, withWeight = True)  	#文本拆分分析
    keywords = dict()
    for i in result:
        keywords[i[0]] = i[1]
    print(keywords)
    #词云的相关设置
    wc = WordCloud(
        font_path = r"F:\Fonts\SimHei.ttf",
        background_color="skyblue",
        max_words=50,
        width = 800,
        height = 600,
        max_font_size = 200,
        min_font_size = 2
        )
    wc.generate_from_frequencies(keywords)
    plt.imshow(wc)
    plt.axis("off")		#去掉坐标轴
    plt.show()			#显示图像
    wc.to_file(path)	#保存图像

def main():
    newslist = []
    url = "http://www.people.com.cn/"
    path = "rmwCloud.jpg"
    html = getHTMLText(url)
    fillList(html,newslist)
    getCloud(html,path)
 
main()

运行结果:

Python爬取人民网文章标题_第1张图片

你可能感兴趣的:(Python,爬虫,python,爬虫)