首页 > Python > 爬取网易新闻排行榜

爬取网易新闻排行榜

2019-09-14

?

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

**一些说明:**

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

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

* 将得到的标题和链接,保存为本地文件。
import os
import sys
import requests
import re

from lxml import etree


def StringListSave(save_path, filename, slist):
    # 检测是否有这个文件目录,不存在的话,会自动创建
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    path = save_path+"/"+filename+".txt"
    with open(path, "w+") as fp:
        for s in slist:
            # 做了utf8转码,转为终端可识别的码制
            fp.write("%s\t\t%s\n" % (s[0].encode("utf8").decode('utf-8'), s[1].encode("utf8").decode('utf-8')))


def Page_Info(myPage):
    '''Regex'''
    # 这里的re.findall 返回的是一个元组列表,内容是 (.*?) 中匹配到的内容
    # 析取每个链接的标题和链接
    mypage_Info = re.findall(r'

(.*?)

' r'
', myPage, re.S) return mypage_Info def New_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)) return zip(new_items, new_urls) def Spider(url): i = 0 print("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 in myPageResults: 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")

?

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

import os
save_path = "网易新闻抓取"
if not os.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) 最常见的读写操作

import re
with open('/rr.txt', 'w') as f:
   f.write('hello world')

如图所示:

?

追加写入文件内容:

import re
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、指定占位符宽度,指定对其方式

?

?

原文链接:https://www.cnblogs.com/qy1234/p/9461637.html

文章标签:
相关阅读