网页新闻抓取(手机版简版网易新闻网址获取新闻链接列表列表的网址)

优采云 发布时间: 2022-01-20 22:10

  网页新闻抓取(手机版简版网易新闻网址获取新闻链接列表列表的网址)

  网站分析

  为了方便抓取,选择了简化版网易新闻网站的手机版。

  在以下位置获取新闻链接列表

  其中1-40代表当前列表中的页数,爬取列表时只需要修改页数即可。

  爬取进程获取新闻链接地址

  使用requests包读取新闻列表页面,然后使用正则表达式提取新闻页面链接,返回urls列表

  def getList(url):

li = requests.get(url)

res = r'url":"http:.*?.html'

urls = re.findall(res,li.text)

for i in range(len(urls)):

urls[i] = urls[i][6:]

return urls

  获取新闻内容

  使用requests获取新闻页面的内容,然后使用BeautifulSoup包解析网页内容。

  def getNews(url):

url = url[:-5]+"_0.html"

ss = requests.get(url)

soup = BeautifulSoup(ss.text,"html.parser")

title = soup.title.string[:-6].encode('utf-8')

time = soup.find("div","about").contents[0][9:].encode('utf-8')

type = soup.find("div","position lBlue").contents[3].string.encode('utf-8')

content = soup.find("div","content").get_text()[1:-1].encode('utf-8')

news = News(title,time,type,content)

return news

  移动短版新闻通常将一条新闻分成若干页来展示,这使得爬取内容非常麻烦。分析后发现在新闻链接地址后加_0可以显示所有新闻内容,所以先处理链接地址。然后使用requests获取网页,BeautifulSoup提取新闻的标题、时间、类别和内容。

  保存结果

  def saveAsTxt(news):

file = open('E:/news.txt','a')

file.write("标题:" + news.title +

"\t时间:" + news.time +

"\t类型:"+ news.type +

"\t内容:"+ news.content +

"\"\n")

  运行程序代码

  # encoding: utf-8

import requests

import re

from bs4 import BeautifulSoup

import time

class News:

def __init__(self,title,time,type,content):

self.title = title #新闻标题

self.time = time #新闻时间

self.type = type #新闻类别

self.content = content #新闻内容

def getList(url): #获取新闻链接地址

li = requests.get(url)

res = r'url":"http:.*?.html' #正则表达式获取链接地址

urls = re.findall(res,li.text)

for i in range(len(urls)):

urls[i] = urls[i][6:]

return urls

def getNews(url): #获取新闻内容

url = url[:-5]+"_0.html" #处理链接获取全文

ss = requests.get(url)

soup = BeautifulSoup(ss.text,"html.parser") #获取新闻内容,注意编码

title = soup.title.string[:-6].encode('utf-8')

time = soup.find("div","about").contents[0][9:].encode('utf-8')

# type = soup.find("div","position lBlue").contents[3].string.encode('utf-8')

content = soup.find("div","content").get_text()[1:-1].encode('utf-8')

news = News(title,time,type,content)

return news

def saveAsTxt(news): #保存新闻内容

file = open('E:/news.txt','a')

file.write("标题:" + news.title +

"\t时间:" + news.time +

# "\t类型:"+ news.type +

"\t内容:"+ news.content +

"\"\n")

start = time.clock()

sum = 0

for i in range(1,40):

wangzhi = "http://3g.163.com/touch/article/list/BA8J7DG9wangning/%s-40.html" %i

urls = getList(wangzhi)

sum = sum + len(urls)

# print "当前页解析出 %s 条" %len(urls)

j = 1

for url in urls:

print "正在读取第%s页第%s/%s条:%s" %(i,j,len(urls),url.encode('utf-8'))

news = getNews(url)

saveAsTxt(news)

j = j + 1

end = time.clock()

print "共爬取%s条新闻,耗时%f s" %(sum,end - start)

  结果

  

  程序的运行时间主要与页面打开的速度有关。如果网络速度理想,程序运行速度相当快。

  

  笔记

  程序也是入门级爬虫,不涉及代理ip池和多线程效率问题。但是如果附加你需要这些后处理,比如

  高效存储(数据库应该如何排列)

  有效判断权重(这里指的是网页判断,我们不想爬抄抄袭的人民日报和大民报)

  有效的信息提取(比如如何提取网页上的所有地址,“朝阳区奋进路中国路”),搜索引擎通常不需要存储所有信息,比如图片,我为什么要保存它们...

  及时更新(预测此页面的更新频率)

  可以想象,这里的每一点都可以被许多研究人员研究数十年。(知乎:谢克)

  附录

  请求文件

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线