网页新闻抓取(做一个通过机器学习进行新闻分类(图)课)
优采云 发布时间: 2021-12-29 14:08网页新闻抓取(做一个通过机器学习进行新闻分类(图)课)
最近在做数据挖掘类,需要设置一个类。我打算通过机器学习做一个新闻分类。首先要有大量的文字(新闻),做训练,通过爬虫爬取大量的新闻。
一、思路如下:
0.首先确定获取数据的网站
1. 通过 BeautifulSoup 剪切链接
2. 然后使用python的第三方框架paper3k,直接传指定的链接,然后返回新闻正文(当然也可以通过BeautifulSoup剪出正文)
二、流程如下:
1.选择的网址#pageid=153&lid=2509&k=&num=50&page=1
页面如上
2.更多新闻可以使用拼接url或者模拟点击。我使用模拟点击这里
使用python框架selenium模拟点击
Selenium 是一个完整的 Web 应用程序测试系统。它用于模拟点击。它需要与 Google Chrome 或 Firefox 浏览器以及不同的驱动程序一起使用。
单击按钮时定位不同的元素
对于新浪网,是这样的:
这个点击定位就是在页面中找到所有对应的id,从上到下,第一个就是我们想要的
browser.find_elements_by_class_name("pagebox_pre")[1]
然后每次点击,获取下一页,获取整个界面,切出url,重复
3.使用BeautifulSoup截取新闻url
def geturl(html): #获取所有新闻链接
sleep(2)
soup = BeautifulSoup(html , "html.parser")
bd = soup.find(attrs = {"class" : "d_list_txt"})
b1 = bd.findAll(attrs = {"class" : "c_tit"})
for u in b1:
urlList.append(u.findAll('a')[0].get("href")) #获取所有新闻链接
4. 使用python的第三方框架paper3k,直接传指定链接,然后返回新闻正文
def captive( url ): #获取新闻内容
news = Article( url , language='zh')
sleep(1)
news .download() #下载
news .parse() #解析
newsList.append(news.text) #新闻正文
三、具体代码如下
#! /usr/bin/env python
#coding=utf-8
import io
import sys
from tqdm import tqdm
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
from selenium import webdriver
from time import sleep
import requests
from bs4 import BeautifulSoup
from newspaper import Article
from selenium.webdriver.common.action_chains import ActionChains
'''
8 军事 https://news.sina.com.cn/roll/#pageid=153&lid=2514&k=&num=50&page=2
6 娱乐 https://news.sina.com.cn/roll/#pageid=153&lid=2513&k=&num=50&page=2
5 体育 https://news.sina.com.cn/roll/#pageid=153&lid=2512&k=&num=50&page=2
2 科技 https://news.sina.com.cn/roll/#pageid=153&lid=2515&k=&num=50&page=2
1 财经 https://news.sina.com.cn/roll/#pageid=153&lid=2516&k=&num=50&page=2
7 国际 https://news.sina.com.cn/roll/#pageid=153&lid=2968&k=&num=50&page=2
'''
url = "https://news.sina.com.cn/roll/#pageid=153&lid=2515&k=&num=50&page=26"
urlList = [] #url 列表
newsList = [] #newsn内容列表
def captive( url ): #获取新闻内容
news = Article( url , language='zh')
sleep(1)
news .download() #下载
news .parse() #解析
newsList.append(news.text) #新闻正文
def gethtml( url , n ): #新闻的url 及获取的次数1次点击50条
browser.get(url)
for i in range(0,n):
sleep(2)
label_bel = browser.find_elements_by_class_name("pagebox_pre")[1] #定位点击键
html = browser.page_source # 获取网页
geturl(html)
label_bel.click() # 进行点击加载更多
sleep(2)
currentPageUrl = browser.current_url
browser.get(browser.current_url)
def geturl(html): #获取所有新闻链接
sleep(2)
soup = BeautifulSoup(html , "html.parser")
bd = soup.find(attrs = {"class" : "d_list_txt"})
b1 = bd.findAll(attrs = {"class" : "c_tit"})
for u in b1:
urlList.append(u.findAll('a')[0].get("href")) #获取所有新闻链接
browser = webdriver.Chrome() # 加载浏览器
gethtml( url , 20 )
#for url1 in urlList: #测试链接
# print(url1)
print(len(urlList))
for newsurl in tqdm(urlList):
try:
captive( newsurl )
except:
pass
continue
sleep(0.1)
for i in tqdm(range(len(newsList))): #存入文件
try:
f = open(r"datass\2_" + str(1000 + i) + ".txt",'a',encoding="utf-8")
f.write(newsList[i])
f.close()
except:
pass
continue
sleep(0.1)
print("结束")
#print(newsList[0])
#f=open('./1.html',mode="w",encoding="utf-8") #这三行为测试使用
#f.write(html)
四、项目配置
大部分python的模块都可以用pip安装,简单介绍一下:
1、注意事项,为了一遍遍的过一遍整个过程,先更新pip
python -m pip install --upgrade pip
pip 使用总结
2. 安装报纸(获取网络新闻的强大框架)
pip install newspaper3k
使用教程:
3.安装 Beautifulsoup
pip install beautifulsoup4
使用教程:
4.安装selenium(selenium是一套完整的web应用测试系统,用它来模拟点击,需要配合浏览器)
pip install selenium
4.1 对应的配置
此处使用谷歌Chrome浏览器
下载浏览器对应的驱动
查看浏览器版本号
然后将驱动安装到python目录下
使用教程:
以上配置步骤全部完成
推荐一个网站:有很多有趣的项目值得学习研究