python 爬虫 基础网站

注:文章末尾会放出 爬虫的代码
月光社是一个优质的崩坏3辅助社区
其中 圣痕系统 是该网站中爬虫技术含量最低的页面(我是这么觉得的)
python 爬虫 基础网站_第1张图片python 爬虫 基础网站_第2张图片python 爬虫 基础网站_第3张图片
所以我们要先知道每个圣痕组的 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('',response.text)       #stig_url_list储存正则表达式匹配到符合的字符串(注:是列表形式  list)

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

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

img_id = re.findall('\n                        ',stig_response.text)   #匹配圣痕的名称(上中下
img_name = re.findall('

(.*?)

\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('',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                        ',stig_response.text)   #匹配圣痕的名称(上中下)
		img_name = re.findall('

(.*?)

\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

你可能感兴趣的:(python 爬虫 基础网站)