分享一个之前写的爬取小姐姐的代码
爬取网址是:http://www.zdqx.com/qingchun
代码:[Python] 纯文本查看 复制代码 import requests #导入requests库import re #导入re库
import os #导入os库
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'referer': 'http://www.zdqx.com/pcbz/70270.html',
'cookie': 'Hm_lvt_303a32038183efa6d8efec90c0031b87=1581472898; Hm_lpvt_303a32038183efa6d8efec90c0031b87=1581472912'
} #设置伪装头
def get_urls(url,num_page): #定义一个获得urls的函数
response = requests.get(url=url, headers=headers) #用requests库的get函数访问网站url,并且用伪装头进行伪装,以免被反爬
response.encoding = response.apparent_encoding #获得的信息编码模式为网站的编码模式
result = re.findall('<div class="listbox">(.*?)</div>', response.text, re.S) #用正则表达式去提取<div class="listbox"> </div>中的内容
urlsTitleList = re.findall('<a href="(.*?)" target="_blank" title="(.*?)">', str(result), re.S) #提取标题
pageNumList = re.findall('<em class="page_num">共(.*?)张</em>',str(result), re.S) #提取张数
for urlAndTitle,num in zip(urlsTitleList,pageNumList): #依次便利
url = 'http:'+urlAndTitle[0] #url前加上http用于访问网站
title = urlAndTitle[1] #标题是第二个,编程中0是第一个
num = int(num) #将获得的页数转换为int格式
for page in range(1,num+1): #依次便利第一页到第总页数+1页
if page == 1: #如果是第一页
newUrl = url #新的url还是这个url
else: #如果不是,就需要构造
newUrl = url.replace('.html','_%s.html'%page) #根据页数来构造新的url
resp = requests.get(newUrl,headers=headers) #访问构造的url获得信息
resp.encoding = resp.apparent_encoding #编码模式为网站编码模式
div_main = re.findall('<div class="main_center_img" style=" min-height: 745px;">(.*?)</div>',resp.text,re.S) #用正则表达提取信息
url_alt = re.findall('<img src="(.*?)"', str(div_main), re.S) # 长度为3
_url = 'http:'+url_alt[1] #构造网站
imgTitle = title+str(page) #页数
savedata(_url,imgTitle,num_page) #保存
def savedata(url,title,num_page): #定义一个保存函数
path = '小姐姐图片/第{}页'.format(num_page) #保存路径为 小姐姐图片/第{}页
if not os.path.exists(path): #如果没有就自动创建
os.makedirs(path) #多级目录
response = requests.get(url,headers=headers) #requests库访问
response.encoding = response.apparent_encoding #编码同上
with open(path + '/' + title + '.jpg',mode="wb") as f: #打开一个jpg文件,没有就新建
f.write(response.content) #保存二进制信息
print(title+' 保存成功!') #保存成功
f.close() #关闭
def download_page(num_page): #定义下载函数
if num_page == 1: #如果是第一页
url = 'http://www.zdqx.com/qingchun/index.html' #采集网址就是该网址
else: #否则
url = 'http://www.zdqx.com/qingchun/index_' + str(num_page) + '.html' #网址后加数字
get_urls(url, num_page) #调用函数访问
print('第' + str(num_page) + '页采集完毕!')
def main_run(): #定义主函数
for page in range(1, 41): #便利1-41
download_page(page) #下载
if __name__ == '__main__':
main_run() #运行
|