python 爬虫 基础网站

507次阅读
没有评论

注:文章末尾会放出 爬虫的代码
月光社是一个优质的崩坏3辅助社区
其中 圣痕系统 是该网站中爬虫技术含量最低的页面(我是这么觉得的)
pythonpythonpythonpython
所以我们要先知道每个圣痕组的 id
所以先使用requests库访问月光社圣痕系统的主页面:http://www.3rdguide.com/web/stig/index
然后根据源码编写正则表达式:’

为了方便书写,我先定义个请求的方法

import requests

def Request(url): #由于后续需要多次用到类似请求,所以为了方便,就构建成方法 head = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'} while True: try: response = requests.get(url,headers = head) except: print('出错啦') else: if response.status_code == 200: #判断请求状态是不是200 return response #返回结果 结束函数 break else: print('连接错误:'+str(response.status_code)) #链接出错提示,并重新开始循环

随后我都使用Request()函数来请求网页

url = 'http://www.3rdguide.com/web/stig/index' response = Request(url) stig_id_list = re.findall('<a href="/web/stig/(.*?)" >',response.text) #stig_url_list储存正则表达式匹配到符合的字符串(注:是列表形式 list)

这样每个圣痕组对应的id就储存在列表stig_url_list中了

现在每个圣痕组的url都可以知道了,现在接着以符华 戍边为模版分析单个圣痕储存的连接的规律
python
利用检查功能可以快速在源码中查到与网页元素对应的节点
编写正则表达式匹配字符

img_id = re.findall('<!– 图片-名称 –>\n <img src="//static.3rdguide.com/image/data/uploads/all/(.*?)" alt="">',stig_response.text) #匹配圣痕的名称(上中下 img_name = re.findall('<p>(.*?) </p>\n <!– 数值 –>',stig_response.text) #匹配圣痕图片的链接中的标志字符

其中stig_response储存的是圣痕组(例:符华·戍边)网页的源代码

由于正则表达式匹配的字符是用列表的形式储存,所以我用for in 来遍历列表元素,其中使用了zip()函数来将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

for Id,name in zip(img_id,img_name): #同时遍历两个列表并将他们逐个储存在Id和name中 img_url = 'http://static.3rdguide.com/image/data/uploads/all/' + Id #重构圣痕图片链接

接下来就是关于下载图片的代码了

import os

img = Request(img_url) if os.path.exists(os.getcwd()+'/Stig'): #判断该程序目录下是否含有名为 Stig 的文件夹 pass else: os.mkdir(os.getcwd()+'/Stig') #在该目录下创建名为 Stig 的文件夹 Format = img_url[4:] #判断图片的格式 .jpg 或 .png open('./Stig/'+name+Format,'wb').write(img.content) #打开 #open('./Stig/img_url.txt','a+').write(img_url+' '+name+'\n') #将图片链接保存下来用于分享 print('保存成功:'+name) #保存完后提示

我这是拆分结构进行讲解,使用时每个片段间要注意缩进

接下来放合并的代码

import requests import re import os

def Request(url): #由于后续需要多次用到类似请求,所以为了方便,就构建成方法 head = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'} while True: try: response = requests.get(url,headers = head) except: print('出错啦') else: if response.status_code == 200: #判断请求状态是不是200 return response #返回结果 结束函数 break else: print('连接错误:'+str(response.status_code)) #链接出错提示,并重新开始循环

def stig(): head = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'} #请求头 url = 'http://www.3rdguide.com/web/stig/index' response = Request(url) stig_id_list = re.findall('<a href="/web/stig/(.*?)" >',response.text) #stig_url_list储存正则表达式匹配到符合的字符串(注:是列表形式 list) for Id in stig_url_list: #遍历stig_url_list列表,并储存在stig_url变量中 stig_url = 'http://www.3rdguide.com/web/stig/' + Id #重新构建url stig_response = Request(stig_url) #访问单组圣痕(通常为上,中,下),圣痕的图片是在stig_url储存的链接中加载 img_id = re.findall('<!– 图片-名称 –>\n <img src="//static.3rdguide.com/image/data/uploads/all/(.*?)" alt="">',stig_response.text) #匹配圣痕的名称(上中下) img_name = re.findall('<p>(.*?) </p>\n <!– 数值 –>',stig_response.text) #匹配圣痕图片的链接中的标志字符 for Id,name in zip(img_id,img_name): #同时遍历两个列表并将他们逐个储存在Id和name中 img_url = 'http://static.3rdguide.com/image/data/uploads/all/' + Id #重构圣痕图片链接 img = Request(img_url) if os.path.exists(os.getcwd()+'/Stig'): #判断该程序目录下是否含有名为 Stig 的文件夹 pass else: os.mkdir(os.getcwd()+'/Stig') #在该目录下创建名为 Stig 的文件夹 Format = img_url[4:] #判断图片的格式 .jpg 或 .png open('./Stig/'+name+Format,'wb').write(img.content) #用二进制方式打开图片文件,将图片链接中的源码以二进制形式写入图片文件 #open('./Stig/img_url.txt','a+').write(img_url+' '+name+'\n') #将图片链接保存下来用于分享 print('保存成功:'+name) #保存完后提示

def main(): #函数入口 stig()

if __name__ == '__main__': main()

文章到这里就结束了,如果对我写的代码有疑问的可以在评论中提出来

对爬虫感兴趣的可以去尝试一下,我是认为这个网站的难度其实不高

但是 月光社 武器大全 使用的技术就会高大上些,使用了ajax技术,感兴趣的可以去搞一波(滑稽),下一篇我也会讲解 武器系统 爬虫方法

时间 2020/2/24

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计4025字。
新手QQ群:570568346,欢迎进群讨论 Python51学习