【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

             pip使用总结 https://www.cnblogs.com/xueweihan/p/4981704.html

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

pip install newspaper3k       

             使用教程:https://github.com/codelucas/newspaper

             3.安装Beautifulsoup

pip install beautifulsoup4

       使用教程 :https://www.cnblogs.com/TryFirst/p/9305001.html

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

pip install selenium

 

       4.1 与之对应的配置

            这里用到的是Google Chrome浏览器

             下载浏览器对应的驱动 http://chromedriver.storage.googleapis.com/index.html

             查看浏览器版本号

 

 

 

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

 

                   使用教程:https://www.cnblogs.com/TryFirst/p/9305001.html

                 以上全部配置步骤完成

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

 

 

 

 

 

 

 

 

 

 

posted @ 2019-06-02 19:57  LiZR07  阅读(883)  评论(0编辑  收藏  举报