欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-28 23:25:10
...

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


①获取页面所有内容

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
在页面上右键——查看页面源代码,找代码规律,如下图所示:
python3进阶学习总结——简单爬虫实现
我需要的是< a > 中的href属性的article后的编码,以及< span >中的中文内容,正则表达式如上代码所示。

测试正则表达式是否正确,可以使用正则表达式在线工具,如http://tool.chinaz.com/regex/
如下图所示
python3进阶学习总结——简单爬虫实现
上面输入正则表达式,下面输入内容,如果能匹配的话,下面的内容会变成黄色


③保存数据

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())
相关标签: python3爬虫