python爬取热门新闻每日排行_爬取网易新闻排行榜

本文详细介绍了如何使用urllib2或requests库配合正则表达式和XPath抓取[网易新闻排行榜](http://news.163.com/rank/)的新闻标题和链接,并将其保存为本地文件。通过os模块管理和requests库的GET请求,读者将学会爬虫的基本操作和文件操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#网络爬虫之最基本的爬虫:爬取[网易新闻排行榜](http://news.163.com/rank/)

**一些说明:**

* 使用urllib2或requests包来爬取页面。

* 使用正则表达式分析一级页面,使用Xpath来分析二级页面。

* 将得到的标题和链接,保存为本地文件。

importosimportsysimportrequestsimportrefrom lxml importetreedefStringListSave(save_path, filename, slist):#检测是否有这个文件目录,不存在的话,会自动创建

if notos.path.exists(save_path):

os.makedirs(save_path)

path= save_path+"/"+filename+".txt"with open(path,"w+") as fp:for s inslist:#做了utf8转码,转为终端可识别的码制

fp.write("%s\t\t%s\n" % (s[0].encode("utf8").decode('utf-8'), s[1].encode("utf8").decode('utf-8')))defPage_Info(myPage):'''Regex'''

#这里的re.findall 返回的是一个元组列表,内容是 (.*?) 中匹配到的内容

#析取每个链接的标题和链接

mypage_Info = re.findall(r'

(.*?)'r'

.*?
', myPage, re.S)returnmypage_InfodefNew_Page_Info(new_page):'''Regex(slowly) or Xpath(fast)'''

#将new_page的内容转为html格式的树

dom =etree.HTML(new_page)#析取

new_items = dom.xpath('//tr/td/a/text()')#析取

new_urls = dom.xpath('//tr/td/a/@href')assert(len(new_items) ==len(new_urls))returnzip(new_items, new_urls)defSpider(url):

i=0print("downloading", url)

myPage= requests.get(url).content.decode("gbk")

myPageResults=Page_Info(myPage)

save_path= "网易新闻抓取"filename= str(i)+"_"+"新闻排行榜"StringListSave(save_path, filename, myPageResults)

i+= 1

for item, url inmyPageResults:print("downloading", url)

new_page= requests.get(url).content.decode("gbk")

newPageResults=New_Page_Info(new_page)

filename= str(i)+"_"+item

StringListSave(save_path, filename, newPageResults)

i+= 1

if __name__ == '__main__':print("start")

start_url= "http://news.163.com/rank/"Spider(start_url)print("end")

解析一:检测是否有这个文件目录,不存在的话,会自动创建

importos

save_path= "网易新闻抓取"

if notos.path.exists(save_path):

os.makedirs(save_path)

解析二:os.mkdir 与 os.makedirs 区别及用法:

(1)mkdir( path [,mode] )

作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777。

如果目录有多级,则创建最后一级。如果最后一级目录的上级目录有不存在的,则会抛出一个OSError。

(2)makedirs( path [,mode] )

作用: 创建递归的目录树,可以是相对或者绝对路径。

如果子目录创建失败或者已经存在,会抛出一个OSError的异常,Windows上Error      183即为目录已经存在的异常错误。如果path只有一级,与mkdir一样。

总结:os.mkdir()创建路径中的最后一级目录;os.makedirs()创建多层目录。

解析三:文件操作,with open as追加文本内容实例:

(1) 最常见的读写操作

importre

with open('/rr.txt', 'w') as f:

f.write('hello world')

如图所示:

追加写入文件内容:

importre

with open('/rr.txt', 'a') as f:

f.write('hello world\n')#print(f.readline(1))

如图所示:

(2) 一些正则表达式的关键词

w:以写方式打开,

a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)

r+:以读写模式打开

w+:以读写模式打开 (参见 w )

a+:以读写模式打开 (参见 a )

rb:以二进制读模式打开

wb:以二进制写模式打开 (参见 w )

ab:以二进制追加模式打开 (参见 a )

rb+:以二进制读写模式打开 (参见 r+ )

wb+:以二进制读写模式打开 (参见 w+ )

ab+:以二进制读写模式打开 (参见 a+ )fp.read([size])

解析四:python格式化输出

%s\t\t%s\n

解: %s:字符串; \n:换行; \t: 横向制表符

1、  打印字符串

2、打印整数

3、打印浮点数

4、打印浮点数(指定保留小数点位数)

5、指定占位符宽度

6、指定占位符宽度,指定对其方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值