一、爬取連接:http://www.dytt8.net/
二、爬取內容:
i、分類:-->mysql
<a href="http://www.ygdy8.net/html/gndy/dyzz/index.html">最新影片</a></li><li>
<a href="http://www.ygdy8.net/html/gndy/china/index.html">國內電影</a></li><li>
<a href="http://www.ygdy8.net/html/gndy/oumei/index.html">歐美電影</a></li><li>
<a href="http://www.dytt8.net/html/gndy/rihan/index.html">日韓電影</a></li><li>
ii、發佈時間、片名、分類、簡介、連接
html
import requests import re from lxml import etree """ 創建爬蟲,返回爬取內容 輸入: url: 要爬取的連接 輸出: data: 抓取後的返回值 """ def spider(url): kv = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=kv) # 設置編碼 response.encoding = "gbk" data = response.text return data """ 獲取分類下總頁數 輸入: data: 爬蟲spider抓取頁面後的返回值 輸出: int(pageRes): 總頁數 """ def getPage(data): selector = etree.HTML(data) page = selector.xpath("//div[@class='x']")[1] # 輸出xpath下的全部內容 加‘?’指的是最小匹配 pageRes = re.findall('共(.*?)頁', page.xpath('string(.)'))[0] return int(pageRes) """ 獲取電影連接, 根據連接獲取全部跳轉連接與電影名 輸入: data: 爬蟲spider抓取頁面後的返回值 links: 用來保存每一頁上電影的連接,list結構 輸出: 無 """ def saveLink(data, links): selector = etree.HTML(data) allLink = selector.xpath("//a[@class='ulink']") for link in allLink: name = re.findall('《(.*?)[》】]', link.xpath('./text()')[0]) if len(name): link = ('http://www.ygdy8.net' + link.xpath('./@href')[0], name[0]) links.insert(0, link) # 頭插 #print(link) """ 根據電影連接獲取相關信息 輸入: url: 頁面連接 輸出: time: 上映時間 brief: 電影簡介 """ def findDownURL(url): data = spider(url) selector = etree.HTML(data) # print(data[:1000]) time = re.findall(r"(\d{4}-\d{1,2}-\d{1,2})", data)[0] # print(time) down = re.findall(r"magnet.*announce", data) # print(down) brief = re.findall(r"◎簡 介(.*)", data)[0].strip().split("◎")[0] # 消除字符串先後空格,而後按◎分割,取前一部分(防止後面出現「◎獲獎」) # print(brief) dr = re.compile(r'(\u3000)|(【下載地址】)|(<[^>]+>)|(&.*?;)', re.S) # 數據清洗 brief = dr.sub("", brief) # print(brief) return time, brief, down """ 輸出列表內容,而且獲取每一鏈接下的信息(包括下載地址和時間),而後制空列表 輸入: links: 用來保存每一頁上電影的連接,list結構 輸出: 無 """ def printList(links): sum = len(links) for i in range(sum): link = links.pop() print(" ", link, findDownURL(link[0])) """ 獲取包含分頁下的全部連接 輸入: links: 用來保存每一頁上電影的連接,list結構 url: 分類連接 輸出: 無 """ def getAllURL(links, url): data = spider(url + "1.html") saveLink(data, links) page = getPage(data) print("第 1 頁爬取完成", url + "1.html") printList(links) # for i in range(2, 100): # 爬取前十頁 for i in range(2, page+1): # list可能溢出, 採用變輸出邊清空 data = spider(url + str(i) + ".html") saveLink(data, links) print("第", i, "頁爬取完成", url + str(i) + ".html") printList(links) # print(links) links = [] #同一類型下全部電影的連接、片名 typeURL = "http://www.ygdy8.net/html/gndy/dyzz/list_23_" # 注意並不是完整的url getAllURL(links, typeURL)
運行結果:python
可能越日後爬,結果越難以預測,主要由於後面的頁面可能存在正則不一致問題。mysql