python3进阶学习总结——简单爬虫实现

来源:互联网 发布:淘宝网9.9包邮 编辑:程序博客网 时间:2024/06/08 03:31

从网上爬数据的过程包括:访问页面并获取页面的所有的内容——按照正则表达式筛选并把想要的数据分组——保存数据


①获取页面所有内容

import urllib.requestimport sys#设置访问登录网址weburl="https://www.qiushibaike.com/textnew/page/2/?s=4985583"#设置报头webhead={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'}#构造request请求req=urllib.request.Request(url=weburl,headers=webhead)#发送request请求并获得响应response=urllib.request.urlopen(req)content = response.read()#改变返回内容的编码type = sys.getfilesystemencoding()content = content.decode(type)

②使用正则表达式

import repattern = re.compile('<a href="/article/([0-9]*)" target="_blank" class=\'contentHerf\' >\n<div class="content">\n*<span>(.*?)</span>\n*</div>',0)#特别说明一点,()表示筛选后的数据,先是用整个正则表达式筛选出数据,然后把()里匹配的内容留下result = re.findall(pattern, content)

这里爬的是糗事百科的段子,网址如下:
https://www.qiushibaike.com/textnew/page/2/?s=4985583
在页面上右键——查看页面源代码,找代码规律,如下图所示:
这里写图片描述
我需要的是< a > 中的href属性的article后的编码,以及< span >中的中文内容,正则表达式如上代码所示。

测试正则表达式是否正确,可以使用正则表达式在线工具,如http://tool.chinaz.com/regex/
如下图所示
这里写图片描述
上面输入正则表达式,下面输入内容,如果能匹配的话,下面的内容会变成黄色


③保存数据

def saveTofile(name,content):    file=open(name+'.txt', 'w',1000000,'utf-8')    file.write(str(content))    file.close()for item in result:    saveTofile(item[0], item[1])

这里需要强调一点的是:按照正则表达式筛选回来的数据可以看出数组中的数组


自写案例代码:

import urllib.requestimport sysimport reimport osdef saveTofile(name,content):    if not os.path.exists('files'):        os.makedirs('files')    file=open('files/'+name+'.txt', 'w',1000000,'utf-8')    file.write(str(content))    file.close()def getResponse():    #设置访问登录网址    weburl="https://www.qiushibaike.com/textnew/page/2/?s=4985583"    #设置报头    webhead={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'}    #构造request请求    req=urllib.request.Request(url=weburl,headers=webhead)    #发送request请求并获得响应    response=urllib.request.urlopen(req)    content = response.read()    #改变返回内容的编码    type = sys.getfilesystemencoding()    content = content.decode(type)    #<a href="/article/([0-9]*)"[\s\S]*    pattern = re.compile('<a href="/article/([0-9]*)" target="_blank" class=\'contentHerf\' >\n<div class="content">\n*<span>(.*?)</span>\n*</div>',0)    result = re.findall(pattern, content)    for item in result:        saveTofile(item[0], item[1])    return "OK"print(getResponse())