Loading... 梳理下大概步骤: 1. 首先批量获取网站列表页链接 2. 访问列表页 3. 通过正则表达式,提取列表页中的内容页链接 4. 循环访问内容页 5. 正则表达式提取下载链接 6. 将信息归类到字典中 正在学习mysql,目前只能存储到本地 目标网站: > https://www.dytt8.net/ 爬取2019新片精品 该列表页链接为: > https://www.dytt8.net/html/gndy/dyzz/index.html ![无图片描述][1] 分析列表页: 第一页https://www.dytt8.net/html/gndy/dyzz/list_23_1.html 第二页https://www.dytt8.net/html/gndy/dyzz/list_23_2.html 由此知道,list_[x]_[y].html x为栏目的分类id,y则是该栏目下列表页数 这里我暂时只采集这一分类,所以就只变动列表页数就可以了。 查看列表页源码,分析并提取内容页链接: ![2.png][2] 这段html代码,放进正则测试工具,进程正则匹配 ![3.png][3] <a href="https://www.z2blog.com/index.php/go/KC4qKQ==" target="_blank" class="ulink">(.*)</a> 通过上方的正则表达式,我们就可以得到一个列表页中的所有内容页链接了 随便打开一个内容页,再次进行分析,获取下载链接 ![4.png][4] 下载电影,我比较喜欢磁力链接 接着同样方法正则匹配磁力链接 ![5.png][5] 网页中的磁力链接很长,只要其中的核心部分就可以了,一样是有效的。 <font size="4">【下载地址】</font></font></strong> <br /><br /><br /><a href="https://www.z2blog.com/index.php/go/KC4qKSZkbj0uKg==" target="_blank" > 最后再保存到字典中就可以了,也可以保存到一个文本文件中,方便随时查看。学完数据库,就准备搭建个在线的小网站,随时在线搜索,并返回磁力下载连接 现在就可以开始写代码了*~*(完整代码如下) ```Python import urllib.request import re # 我使用的多线程 import threading import time class Spider(object): def __init__(self): # 实例化一个字典,用于保存数据 self.dwdict = {} self.i = 1 # 搞把锁,防止多线程抢占资源 self.mutex = threading.Lock() def get_data = (self. page): url = "https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html" % page response = urllib.request.urlopen(url) response_data = response.read() # 加一个忽视,不加,有时会失败,导致程序中断 response_data = response_data.decode("GBK", ignore) # 解码之后,就是使用正则表达式,获取内容页链接了 film_link = re.findall(r"<a href=\"(.*)\" class=\"ulink\">(.*)</a>", response_data) # 这里会返回一个字典,格式为: # [(连接, 标题), (连接, 标题), ...] # 现在需要循环访问内容页了 for link, title in film_link: # 之前爬取的连接格式都是这样的,所以要进行拼接 # /html/gndy/dyzz/20191016/59264.html link = "https://www.dytt8.net/" + link page_data = urllin.request.urlopen(link) page_data = page_data.read() page_data = page_data.decode("GBK") download_url = re.search("<font size="4">【下载地址】</font></font></strong> <br /><br /><br /><a href="https://www.z2blog.com/index.php/go/KC4qKSZkbj0uKg==" target="_blank" >", page_data) if download_url: download_link = download_url.group(1) self.mutex.acquire() self.dwdict[title] = download_link self.mutex.release() print("已下载 %d 个" % self.i) self.i += 1 else: continue return self.dwdict def start(self, page): for i in range(1, page+1): t1 = threading.Thread(target=self.get_data, args=(i,)) t1.start() list1 = self.dwdict.items() while len(threading.enumerate()) != 1: time.sleep(1) for file_name, download_link in list1: print("{}|{}".format(file_name, download_link)) if __name__ == '__main__': s = Spider() s.start(100)# 下载100页的资源 ``` [1]: http://assets.z2blog.com/imgbed/2019/12/26/20191226100778.png [2]: http://assets.z2blog.com/usr/uploads/2019/11/1772830431.png [3]: http://assets.z2blog.com/usr/uploads/2019/11/1220984869.png [4]: http://assets.z2blog.com/usr/uploads/2019/11/3800951206.png [5]: http://assets.z2blog.com/usr/uploads/2019/11/3709838633.png Last modification:December 26th, 2019 at 02:15 pm © 允许规范转载
感谢分享!!