爬取豆瓣网电视剧数据(共1500条)
我們現(xiàn)在爬取電視劇中的美劇、國產(chǎn)劇、港劇三個分類的所有數(shù)據(jù),共1500條
1、打開開發(fā)者工具,找到第一頁對應(yīng)的json數(shù)據(jù)。(尋找時忽略所有的js,css,ico文件)
2、在第一頁的包含電視劇數(shù)據(jù)的包中找到請求的url
3、為了觀察將url得更清晰,我們接著點擊“加載更多”打開下一頁,進行抓包
展示一下請求json的結(jié)構(gòu)
下面對比一下兩個頁面的url
可以看到有page_limit,page_start兩個參數(shù)值得研究
page_limit指的是煤業(yè)展示的電視劇數(shù)量
page_start表示的是每頁展示的電視劇起始編號
研究到這里,我們就可以開始構(gòu)造不斷請求的url了,每當我們爬取下一頁數(shù)據(jù)時,讓page_start += 20即可
構(gòu)造url:
先寫一個模板url:https://movie.douban.com/j/search_subjects?type=tv&tag=%E5%9B%BD%E4%BA%A7%E5%89%A7&sort=recommend&page_limit=20&page_start={}
在不斷爬取的過程中用format函數(shù)將page_start參數(shù)填進去即可
下面給出爬取美劇、國產(chǎn)劇、港劇三個分類數(shù)據(jù)的代碼
import requests import jsonclass DoubanSpider:def __init__(self):self.url_temp_list = [{"url_temp": "https://movie.douban.com/j/search_subjects?type=tv&tag=%E5%9B%BD%E4%BA%A7%E5%89%A7&sort=recommend&page_limit=20&page_start={}","country": "CN"},{"url_temp": "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}","country": "US"},{"url_temp": "https://movie.douban.com/j/search_subjects?type=tv&tag=%E6%B8%AF%E5%89%A7&sort=recommend&page_limit=20&page_start={}","country": "HONGKONG"}]self.headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36"}def get_json_str(self, url):res = requests.get(url, headers=self.headers)return res.content.decode()# 此函數(shù)將json字符串轉(zhuǎn)換為python數(shù)據(jù)類型dictdef get_content_list(self, json_str):dict_data = json.loads(json_str) # 轉(zhuǎn)換完成后,dict_data是字典print("type(dict_data):", type(dict_data))content_list = dict_data["subjects"] # 還是字典return content_list # 返回的是一個字典,鍵是0,1,2,,,,19def save_content_list(self, content_list, country):with open("doubanMultiArea.txt", "a", encoding="utf-8") as fp:for content in content_list:content["country"] = country # 由于爬取的數(shù)據(jù)沒有分類,手動加上fp.write(json.dumps(content, ensure_ascii=False))fp.write("\n")print("保存成功")def run(self):# 一次for循環(huán)爬取一個類別所有數(shù)據(jù)for url_temp in self.url_temp_list:page_start = 0while True:url = url_temp["url_temp"].format(page_start) # 構(gòu)造下一頁的urljson_str = self.get_json_str(url)content_list = self.get_content_list(json_str)self.save_content_list(content_list, url_temp["country"])if len(content_list) < 20:breakpage_start += 20def main():spider = DoubanSpider()spider.run()if __name__ == '__main__':main()效果圖:
總結(jié)
以上是生活随笔為你收集整理的爬取豆瓣网电视剧数据(共1500条)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 善用佳软站长:畅谈大数据时代的知识管理
- 下一篇: java 身份证地址提取籍贯_excel