【寫在前面】
最近大火的《長安十二時辰》真的是好看,算的是良心網劇了。但是由于平時工作時間較長,經常無法準時追劇,并且又因為不想見到元裁那對挨千刀的(作為演員,演技是值得肯定的,角色演繹的讓人看的心煩)。因此就寫個程序,直接爬取《長安》的劇情唄!
【示例代碼】
# coding=utf-8# @Auther : 鵬哥賊優秀# @Date : 2019/8/7from bs4 import BeautifulSoupimport requestsimport getheader# 獲取每一集對應的標題及對應的界面URL關鍵地址def get_title():url = "https://www.tvsou.com/storys/0d884ba0dd/"headers = getheader.getheaders()r = requests.get(url, headers=headers)r.encoding = "utf-8"soup = BeautifulSoup(r.text, "lxml")temps = soup.find("ul", class_="m-l14 clearfix episodes-list teleplay-lists").find_all("li")tempurllist = []titlelist = []for temp in temps:tempurl = temp.a.get("href")title = temp.a.get("title")tempurllist.append(tempurl)titlelist.append(title)return tempurllist, titlelist# 下載長安十二時辰的第x集之后所有劇情,默認從第一集開始下載。def Changan(episode=1):tempurllist_b, titlelist_b = get_title()tempurllist = tempurllist_b[(episode - 1):]titlelist = titlelist_b[(episode - 1):]baseurl = "https://www.tvsou.com"for i, tempurl in enumerate(tempurllist):print("正在下載第{0}篇".format(str(i + episode)))url = baseurl + tempurlr = requests.get(url, headers=getheader.getheaders())r.encoding = "utf-8"soup = BeautifulSoup(r.text, "lxml")result = soup.find("pre", class_="font-16 color-3 mt-20 pre-content").find_all("p")content = []for temp in result:if temp.string:content.append(temp.string)with open("test.txt", "a") as f:f.write(titlelist[i] + "\n")f.writelines(content)f.write("\n")if __name__ == "__main__":Changan(43)
【效果如下】
【知識點】
1、怎么自動獲取每一集對應的URL地址?
先查看第一集的爬取內容,發現在響應中有一段各劇集的信息,如下圖:
從這段響應消息中可以看到,每一集對應了一個href,然后第一集的URL地址中“https://www.tvsou.com/storys/0d884ba0dd/”剛好有部分URL地址與href一致。然后再驗證了下第二集URL,發現的確就是對應的href。因此就得到了如何自動獲取各集URL地址的方式。
2、如何爬取每一集的劇情內容呢?
以第一集為例,在響應中可以看到這樣一段內容。
在class_="font-16 color-3 mt-20 pre-content"標簽內,就有劇情內容。但是由于這段響應中有多個p標簽,每個p標簽對應一段內容。因此需要對每個p標簽進行text提取。并且由于第一個p標簽是
【寫在最后】
好啦,一直寫爬蟲也有點無聊了,后面開始學習GUI制作吧,寫些新東西。另外,竟然收到了兩位讀者大大的贊賞,好開心!