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

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


①获取页面所有内容

import urllib.request
import 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 re


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)

这里爬的是糗事百科的段子,网址如下:
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.request
import sys
import re
import os

def 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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值