网络爬虫,可以理解为在网络上爬行的一种蜘蛛。互联网就像一张大网,爬虫在这张网上爬来爬去,遇到需要的资源,可以抓取下来。
在抓取资源的过程中需要使用URL做资源定位。URL(统一资源定位符)就是平常说的网址,可以从互联网上获取资源的位置。
互联网上每个文件都有唯一的URL,URL包含的信息可以指出文件在互联网上的位置。
例子一:
保存通过URL(http://blog.zhuohua.store)获取到的网页源代码和内容:
脚本内容:
#coding=utf-8
import urllib.request #内置模块,无需额外安装
response = urllib.request.urlopen(“http://blog.zhuohua.store”)
Key_1 = response.read().decode(“utf-8″)
print(Key_1)
运行脚本,并把输出结果写入(覆盖)到文件:(脚本所在目录下会生成文件1.txt,文件里会包含网页源代码和内容)
C:\Users\jacky\Desktop>python xx.py > 1.txt
C:\Users\jacky\Desktop>
######
例子二:
从例子一获取的数据中筛选出此站点的所有分区名称:
笺注:
站点(http://blog.zhuohua.store)的分区名称格式,如下:
<h3><a href=”index.php?gid=3″ style=””>CentOS6.9/Redhat6.9</a></h3>
<h3><a href=”index.php?gid=59″ style=””>CentOS8/Redhat8</a></h3>
<h3><a href=”index.php?gid=11″ style=””>Windows</a></h3>
<h3><a href=”index.php?gid=44″ style=””>Virtualization</a></h3>
<h3><a href=”index.php?gid=33″ style=””>Python3.6</a></h3>
脚本内容:
#coding=utf-8
from io import StringIO
String_1 = StringIO()
def func1(): #读取文件内容
Path_1 = “./1.txt”
f_name = open(Path_1,’r’)
fields_1 = f_name.readlines() #输出结果为列表,包含换行符
f_name.close()
func2(fields_1)
def func2(fields_1): #从func1()获得的数据中进行筛选
K_1 = “index.php?gid=” #关键字
for Key_1 in fields_1:
if K_1 in Key_1:
Result_1 = f”{Key_1.split(‘style=’)[1][3:][:-10]}\n” #以’style=’为分隔符进行分割后,取第二项,然后去掉前面3个字符,再去掉最后10个字符,最后换行
String_1.write(Result_1)
Result_2 = String_1.getvalue()
print(“此站点的所有分区名称:”)
print(Result_2)
if __name__ == ‘__main__’:
func1()
脚本运行的结果:(结果最后(右边)会多了一个换行符)
C:\Users\jacky\Desktop>python xx.py
此站点的所有分区名称:
CentOS6.9/Redhat6.9
CentOS8/Redhat8
Windows
Virtualization
Python3.6
C:\Users\jacky\Desktop>
######
例子三:
从例子一获取的数据中筛选出所有分区名称及各自分区下的版块名称:
笺注:
其中分区(Python3.6)下的版块名称格式,如下:
<h2><a href=”forumdisplay.php?fid=35″ style=””>安装Python3</a></h2>
<h2><a href=”forumdisplay.php?fid=34″ style=””>基础(一)</a></h2>
<h2><a href=”forumdisplay.php?fid=39″ style=””>基础(二)</a></h2>
<h2><a href=”forumdisplay.php?fid=36″ style=””>运维(一)</a></h2>
<h2><a href=”forumdisplay.php?fid=38″ style=””>运维(二)</a></h2>
<h2><a href=”forumdisplay.php?fid=40″ style=””>应用</a></h2>
脚本内容:
#coding=utf-8
from io import StringIO
String_1 = StringIO()
def func1(): #读取文件内容
Path_1 = “./1.txt”
f_name = open(Path_1,’r’)
fields_1 = f_name.readlines() #输出结果为列表,包含换行符
f_name.close()
func2(fields_1)
def func2(fields_1): #从func1()获得的数据中进行筛选
K_1 = “index.php?gid=” #分区名称的关键字
K_2 = “forumdisplay.php?fid=” #版块名称的关键字
for Key_1 in fields_1:
if K_1 in Key_1:
Result_1 = f”《{Key_1.split(‘style=’)[1][3:][:-10]}》\n”
String_1.write(Result_1)
if K_2 in Key_1:
Result_1 = f”{Key_1.split(‘style=’)[1][3:][:-10]}\n”
String_1.write(Result_1)
Result_2 = String_1.getvalue()
Result_2 = Result_2.rstrip(‘\n’) #去除结果最后(右边)的一个换行符
print(“此站点的所有分区名称及各自分区下的版块名称:”)
print(Result_2)
if __name__ == ‘__main__’:
func1()
脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
此站点的所有分区名称及各自分区下的版块名称:
《CentOS6.9/Redhat6.9》
安全加固
LNMP一键安装包_v1.3
Lamp
Shell
ftp
Nginx反向代理
Nginx+Tomcat+JDK
Oracle Linux6.9
常见服务
《CentOS8/Redhat8》
基础
基础服务
常用服务
Zabbix4.4.5
《Windows》
安全加固
FTP
文件共享
UPUPW
IIS+PHP
Tomcat
MySQL
MSSQL
DHCP & DNS
Windows域
《Virtualization》
VMware ESXi 6.5
CentOS8_KVM
CentOS7.8_KVM
《Python3.6》
安装Python3
基础(一)
基础(二)
运维(一)
运维(二)
应用
C:\Users\jacky\Desktop>
######
例子四:
获取分区(Python3.6)下的版块《安装Python3》下的主题(文章)名称:
笺注:
版块《安装Python3》下的主题名称格式,如下:
<span id=”thread_366″><a href=”viewthread.php?tid=366&extra=page%3D1″>CentOS7安装Python3</a></span>
<span id=”thread_186″><a href=”viewthread.php?tid=186&extra=page%3D1″>Win10安装Python3</a></span>
<span id=”thread_121″><a href=”viewthread.php?tid=121&extra=page%3D1″>Windows2012R2安装Python3</a></span>
<span id=”thread_120″><a href=”viewthread.php?tid=120&extra=page%3D1″>Win7/Windows2008R2安装Python3</a></span>
<span id=”thread_119″><a href=”viewthread.php?tid=119&extra=page%3D1″>CentOS6安装Python3</a></span>
脚本内容:
#coding=utf-8
import urllib.request
from io import StringIO
def func1(): #获取分区(Python3.6)下的版块《安装Python3》的网页源代码和内容
String_1 = StringIO()
url_1 = “http://blog.zhuohua.store/forumdisplay.php?fid=35&page=1” #分区(Python3.6)下的版块《安装Python3》的URL
response = urllib.request.urlopen(url_1)
Key_1 = response.read().decode(“utf-8”)
String_1.write(Key_1)
String_2 = String_1.getvalue()
func2(String_2)
def func2(String_2): #把从func1()获得的数据写入(覆盖)文件中
Path_1 = “./2.txt”
f_name = open(Path_1,’w’) #写入(覆盖)文件内容
Result_1 = f_name.write(String_2)
f_name.close()
func3()
def func3(): #从文件中读取数据,再对数据进行筛选
String_1 = StringIO()
Path_1 = “./2.txt”
f_name = open(Path_1,’r’)
fields_1 = f_name.readlines() #输出结果为列表,包含换行符
f_name.close()
K_1 = ‘id=”thread_’ #关键字
for Key_1 in fields_1:
if K_1 in Key_1:
Result_1 = f”{Key_1.split(‘=page%3D1’)[1][2:][:-12]}\n” #以’=page%3D1’为分隔符进行分割后,取第二项,然后去掉前面2个字符,再去掉最后12个字符,最后换行
String_1.write(Result_1)
Result_2 = String_1.getvalue()
Result_2 = Result_2.rstrip(‘\n’) #去除结果最后(右边)的一个换行符
print(“分区(Python3.6)下的版块《安装Python3》下的主题名称:”)
print(Result_2)
if __name__ == ‘__main__’:
func1()
脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
分区(Python3.6)下的版块《安装Python3》下的主题名称:
CentOS7安装Python3
Win10安装Python3
Windows2012R2安装Python3
Win7/Windows2008R2安装Python3
CentOS6安装Python3
C:\Users\jacky\Desktop>
您好,这是一条评论。
要删除评论,请先登录,然后再查看这篇文章的评论。登录后您可以看到编辑或者删除评论的选项。