python爬取新闻并汇总_【python】 爬虫-爬取新闻

最近,在数据挖掘课,要交课设了,打算做一个通过机器学习进行新闻分类,首先要有大量的文本(新闻),去做训练,并通过爬虫爬取大量的新闻

一,思路如下:

0.首先确定获取数据的网站

1.通过BeautifulSoup来切取链接

2. 然后使用python的第三方框架newspaper3k,直接通过给指定的链接,然后返回新闻文本(当然也可通过BeautifulSoup切出文本)

二,过程如下:

1.选定网址   新浪新闻 https://news.sina.com.cn/roll/#pageid=153&lid=2509&k=&num=50&page=1

页面如上

2.查看更多新闻可以使用拼接url 也可以模拟点击,我这里用的模拟点击

使用python 框架 selenium 来进行模拟点击

selenium 是一套完整的web应用程序测试系统,用它来进行模拟点击,需要配合Google Chrome或着火狐浏览器使用,配合不同的驱动

定位点击按钮时,不同的元素

对于新浪网来说如下:

这个点击定位是找到页面中所有对应的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的第三方框架newspaper3k,直接通过给指定的链接,然后返回新闻文本

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

2. 安装newspaper (强大的获取网页新闻框架)

pip install newspaper3k

3.安装Beautifulsoup

pip install beautifulsoup4

4.安装selenium (selenium 是一套完整的web应用程序测试系统,用它来进行模拟点击,需要配合浏览器使用)

pip install selenium

4.1 与之对应的配置

这里用到的是Google Chrome浏览器

查看浏览器版本号

然后将驱动安装到python的目录

以上全部配置步骤完成

推荐一个网站:https://hellogithub.com 里面有许多有意思的项目值得去学习,研究

你可能感兴趣的:(python爬取新闻并汇总)