因为本人比较喜欢搜集资料,在网上找mzsock的爬虫程序,但是网上的要不要钱,要不就是不能用,大佬们写的程序我的也运行不起来。所以自学了个爬虫然后自己爬了下,萌新编的,勿喷。
网站可能会更新,到时候爬虫可能不能用,所以有兴趣的快点搞。
爬虫萌新不会找头信息的进网站,然后F12→上面找network,点第一个列表,往下扒拉,回头headers的一个表示,那个就是。因为不知道自己的头信息会不会暴露所以就不放了。
import requests
from lxml import etree
import re, os
if not os.path.exists('./mz'):
os.mkdir('./mz')
headers = {
"User-Agent": "在这里输入自己的头信息,具体方法自行百度"
} # 头信息
url = "http://mzsock.net/mv/" # page/2 3 4 5 6
for m in range(1, 6):
if m > 1:
url = url + "page/" + str(m)
# print(url)
else:
url = url
# print(url)
date_text = requests.get(url=url, headers=headers).text # 母数据text
tree = etree.HTML(date_text) # 母数据实例化
li_list = tree.xpath('/html/body/section/div[1]/ul/li') # 提取各个列表的url
li_http = [] # 子网址
for li in li_list:
li = li.xpath('./div[1]/a/@href')[0]
li_http.append(li)
http_title = [] # 子网址标题
for title in li_list:
title = title.xpath('./h3/a/@title')[0]
http_title.append(title)
for i in range(0, 20): # 分别提取所有的子网址
ex = '(.*?).html'
li_http_jiequ = re.findall(ex, li_http[i], re.S)[0]
# print(li_http_jiequ)
for j in range(1, 30):
if j > 1:
http_pinjie = li_http_jiequ + '_' + str(j) + ".html"
# print(http_pinjie)
else:
http_pinjie = li_http_jiequ + ".html"
# print(http_pinjie)
son_http = requests.get(url=http_pinjie, headers=headers).text # 对子网站发起请求
son_tree = etree.HTML(son_http)
son_p_list = son_tree.xpath('//p[@class="img_jz"]') # 得到图片所在的属性地址
wocount = 1
for p in son_p_list: # 对子网址的图片发起请求
p = p.xpath("./a/img/@src")[0]
img_src = requests.get(url=p, headers=headers).content
img_name = http_title[i] + str(j) + '.' + str(wocount) + ".jpg"
wocount = wocount + 1
imgpath = './mz/' + str(img_name)
with open(imgpath, 'wb') as fp:
fp.write(img_src)
print(str(i + 1), str(img_name), '下载成功')
url = "http://mzsock.net/mv/"