[网络安全学习篇37]:基于面向对象思想的Python爬虫实例

引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足;对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以我就想到了通过写博客(课程笔记)的形式去学习它,虽然写博客会让我多花几倍的时间去学习它,但是当我完成一篇博客所获得的成就感和你们对于我的认同感,让我很满足,能够鼓励我一天天的坚持下去,也希望和我一起学习本期视频的"同道"们也能给一直坚持下去。我们大家一起加油。由于作者本身也是网络信息安全小白,大部分知识点都是初次接触,出现对其理解不深入,不完整,甚至也会出现错误有问题的地方,希望大家谅解、留言提出指正,同时也欢迎大家来找我一起交流学习!!!

 

往期博客:

第一阶段:

[网络安全学习篇1]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)

[网络安全学习篇24]:漏洞与木马(千峰网络安全视频笔记 p117-p118)

第二阶段:

[网络安全学习篇25]:初识Linux及简单命令

[网络安全学习篇32]:Linux脚本编写汇总及应用

第三阶段:

[网络安全学习篇33]:0基础带你入门python

[网络安全学习篇34]:python文件对象对文件内容进行读取和写入

[网络安全学习篇35]:python 模块和函数及异常捕获

[网络安全学习篇36]:python 面向对象编程思想

[网络安全学习篇37]:基于面向对象思想的Python爬虫实例(本篇)

下期博文:

[网络安全学习篇38]:基础环境搭建

 

目录

 

python爬虫

正则表达式:

单个字符匹配

匹配一组字符串

实例:


python爬虫

 

通过前面所学的内容,我们做一个使用Python来获取网页的信息的实验

 

1、如何使python获取网页的所有html代码

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0

2、过滤图片地址

 

正则表达式:

是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定的字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

 I say Good not food  过滤出good和food两个单词

re模块的应用

单个字符匹配

. 点 匹配单个任意字符

>>> re.findall(".ood","I say Good not food")
['Good', 'food']

[] 中括号里面的内容会被逐一单个匹配

>>> re.findall("[Gf]ood","I say Good not food")
['Good', 'food']

\d 匹配单个数字

>>> re.findall("\d","I am 40")
['4', '0']
>>> re.findall("\d\d","I am 40")
['40']

\w 匹配[0-9]、[a-z]、[A-Z] 以及_ 中的任意一个字符

>>> re.findall("\w","fg38! h")
['f', 'g', '3', '8', 'h']

\s 匹配空白字符 空格 tab键

>>> re.findall("\s","f  g38! h")
['\t', ' ']

匹配一组字符串

直接匹配

>>> re.findall("Good","I say Good not food")
['Good']

分隔符的应用 匹配两个不同的字符串

>>> re.findall("Good|food","I say Good not food")
['Good', 'food']

*号 匹配左邻字符出现0次或者多次

>>> re.findall("go*gle","I like google not ggle goooogle and gogle")
['google', 'ggle', 'goooogle', 'gogle']

+号 左邻字符出现1次或多次

>>> re.findall("go+gle","I like google not ggle goooogle and gogle")
['google', 'goooogle', 'gogle']

?号 左邻字符出现0次或1次

>>> re.findall("go?gle","I like google not ggle goooogle and gogle")
['ggle', 'gogle']

{}号 定义左邻字符出现的次数

>>> re.findall("go{2}gle","I like google not ggle goooogle and gogle")
['google']
>>> re.findall("go{2,3}gle","I like google not ggle goooogle and gogle")
['google']
>>> re.findall("go{2,10}gle","I like google not ggle goooogle and gogle")
['google', 'goooogle']

^ 匹配是否以某个字符串开头

>>> re.findall("^I like","I like google not ggle goooogle and gogle")
['I like']
$匹配是否以某字符串结尾

>>> re.findall("gogle$","I like google not ggle goooogle and gogle")
['gogle']

()分组保存 \数字

>>> test = re.search("(allen)\\1","my name is allenallen")
>>> test.group()
'allenallen'

 

实例:

笔者在网上找了一个网站做实验,特将源码奉上

import urllib.request
import re

class GetHtml(object):
    def __init__(self,URL,HEAD):
        self.url = URL
        self.head = HEAD

    def get_index(self):
        self.request = urllib.request.Request(self.url)
        self.request.add_header("user-agent",self.head)
        self.response = urllib.request.urlopen(self.request)
        return self.response.read()

    def get_urllist(self):
        self.strurllist = []
        self.urllist = re.findall(b"/item/\w{5}_\w{1,2}.html",self.get_index())
        #print(self.urllist)
        for i in self.urllist:
            self.strurllist.append("https://www.meitulu.com/" + str(i,encoding="utf8"))
        #print(self.strurllist)
        return self.strurllist
        

    def get_list(self):
        self.strimglist = []
        #for self.url in self.get_urllist():
        self.imglist = re.findall(b"https://mtl.gzhuibei.com/images/img/\w{5}/[^0]{1,2}.jpg",self.get_index())
            #print(self.imglist)
        for i in self.imglist:
            self.strimglist.append(str(i,encoding="utf8"))
        print(self.imglist)
        return self.strimglist
        
    def get_image(self,x):
        num = 1
        for self.url in self.get_list():
            num += 1
            with open(str(x)+"-"+str(num)+".jpg","wb") as f:
                f.write(self.get_index())
    
html = GetHtml("https://www.meitulu.com/item/16323.html"," Mozilla/5.0 \
(Windows NT 10.0; Win64; x64; rv:75.0)Gecko/20100101 Firefox/75.0")
x = 0
for i in html.get_urllist():
    x+=1
    html = GetHtml(i," Mozilla/5.0 \
(Windows NT 10.0; Win64; x64; rv:75.0)Gecko/20100101 Firefox/75.0")
    html.get_image(x)

运行结果:


参考文献:

B站千峰网络信息安全开源视频课程

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beglage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值