网页新闻抓取(做一个通过机器学习进行新闻分类(图)课)

优采云 发布时间: 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目录下

  

  使用教程:

  以上配置步骤全部完成

  推荐一个网站:有很多有趣的项目值得学习研究

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线