抓取网页新闻(数据抓取方法仅为技术理论可行性研究技术)

优采云 发布时间: 2021-09-09 01:11

  抓取网页新闻(数据抓取方法仅为技术理论可行性研究技术)

  数据采集方法只是技术理论可行性研究,不鼓励任何人进行现实世界的采集。

  先分享一下资源吧~我整理了2019年全年的成绩单:

  /s/1sN6YXjVeJBNf_2OPMkTpLQ 提取码:2438

  接下来分享一下实现代码的思路:首先确定数据的来源。其实网上有一些网站聚合新闻网文稿,有的结构比较清晰,容易掌握。但是为了追求词的准确,我选择了官网,而不是二道。

  接下来分析页面结构。 /lm/xwlb/

  我们可以在页面上看到一个日历控件。点击相应日期后,下方会显示当天的新闻列表。一般来说,列表中的第一个是当天的整条新闻,下面是单个新闻,点击进入每个新闻页面,你会找到“相关文章”的内容。

  

  

  打开 F12 调试并单击不同的日期以在 XHR 选项卡中查找以前的请求。可以发现唯一的变化就是链接地址中的日期字符串。

  这决定了我们的想法。根据更改日期→获取当天新闻列表→循环保存新闻文章内容

  之后的工作就是非常基础的爬虫操作。唯一的技术内容是如何生成日期列表。比如我们要爬取2019年全年的新闻,需要生成20190101到20191231之间的365个日期的列表。 之前我们写过文章日期列表的生成介绍,使用datetime库,这次我们用pandas来实现。

  剩下的就不多说了,自己看代码吧~

  import requests

from bs4 import BeautifulSoup

from datetime import datetime

import os

import pandas as pd

import time

headers = {

'Accept': 'text/html, */*; q=0.01',

'Referer': 'http://tv.cctv.com/lm/xwlb/',

'X-Requested-With': 'XMLHttpRequest',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',

}

def href(date):

"""

用于获取某天新闻联播各条新闻的链接

:param date: 日期,形如20190101

:return: href_list: 返回新闻链接的列表

"""

href_list = []

response = requests.get('http://tv.cctv.com/lm/xwlb/day/' + str(date) + '.shtml', headers=headers)

bs_obj = BeautifulSoup(response.text, 'lxml')

lis = bs_obj.find_all('li')

for each in lis:

href_list.append(each.find('a')['href'])

return href_list

def news(url):

print(url)

response = requests.get(url, headers=headers, )

bs_obj = BeautifulSoup(response.content.decode('utf-8'), 'lxml')

if 'news.cctv.com' in url:

text = bs_obj.find('div', {'id': 'content_body'}).text

else:

text = bs_obj.find('div', {'class': 'cnt_bd'}).text

return text

def datelist(beginDate, endDate):

# beginDate, endDate是形如‘20160601’的字符串或datetime格式

date_l = [datetime.strftime(x, '%Y%m%d') for x in list(pd.date_range(start=beginDate, end=endDate))]

return date_l

def save_text(date):

f = open(str(date) + '.txt', 'a', encoding='utf-8')

for each in href(date)[1:]:

f.write(news(each))

f.write('\n')

f.close()

for date in datelist('20200101', '20200101'):

save_text(date)

time.sleep(3)

  最后,祝大家2020年新年快乐~希望大家在新的一年里有所收获,有所收获,实现每一个小目标。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线