因為有的電影詳情裡沒有影片的又名,所以沒有爬取電影的又名。
基本思路:爬取top250列表頁展示中電影的排行榜排名,電影詳情鏈結,電影名稱。然後通過電影鏈結進入到詳情頁,獲取詳情頁的原始碼,再進行爬取,爬取後的資料儲存在字典中,通過字典儲存在mongo資料庫中的。
from urllib.request import request, urlopen
import re, pymongo
class dbmoviespider(object):
"""豆瓣爬蟲類
"""# 連線資料庫
client = pymongo.mongoclient('localhost')
db = client['dbmovie']
def __init__(self):
self.headers =
def get_list_html(self, page):
"""獲取列表頁源**
:return: 返回網頁源**
"""list_url = ''.format(25*page-25)
request = request(list_url, headers=self.headers)
try:
response = urlopen(request)
except exception as e:
print('列表頁異常:url={}, error={}'.format(list_url, e))
return none, none
else:
return response.read().decode()
def parse_list_html(self, list_html):
"""解析列表頁資料,並進入詳情頁,爬取內容,儲存到字典,存入資料庫
:param list_html: 列表頁網頁源**
:return:
"""list_h = re.findall(re.compile(r'.*? (.*?).*?.*? .*?(.*?)', re.s),list_html)
if list_h:
for l_h in list_h:
index = l_h[0]
if index !='164':
# 第164個資料跟別的不太一樣,沒有主演,沒有編劇,所以把此條資料過濾掉了。
dic = {}
html = obj.get_detail_html(l_h)
dat = obj.parse_detail_html(html)
dic['top排名'] = l_h[0]
dic['片名'] = l_h[2]
dic['導演'] = dat[0]
dic['編劇'] = dat[1]
dic['主演'] = dat[2]
dic['型別'] = dat[3]
dic['製片國家/地區'] = dat[4]
dic['語言'] = dat[5]
dic['上映日期'] = dat[6]
dic['片長'] = dat[7]
dic['imdb鏈結'] = dat[8]
print(dic)
self.db['movie'].insert_one(dic)
else:
pass
else:
print('列表頁資料為空:url={}'.format(list_h))
def get_detail_html(self, list_h):
"""獲取詳情頁源**
:param detail_url: 詳情頁的url
:return: 返回詳情頁網頁源**
"""detail_url =list_h[1]
request = request(detail_url, headers=self.headers)
try:
response = urlopen(request)
except exception as e:
print('詳情頁異常:url={}, error={}'.format(detail_url, e))
return none, none
else:
return response.read().decode()
def parse_detail_html(self, detail_html):
"""解析詳情頁資料
:param detail_html: 詳情頁網頁源**
:return: none
"""pattern = re.compile(r'.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
.*?(.*?)
', re.s)
dat = re.findall(pattern,detail_html)[0]
return dat
if __name__ == '__main__':
obj = dbmoviespider()
for page in range(1,11):
h_l = obj.get_list_html(page)
obj.parse_list_html(h_l)
執行結果如圖:
爬取豆瓣網電影資訊
coding utf 8 import urllib2 import bs4 from bs4 import beautifulsoup 爬取豆瓣網電影簡介,包括電影名,導演,評分以及介紹等 class dbtop def init self self.usr agent mozilla 5.0 w...
python爬蟲 爬取豆瓣網電影資訊
豆瓣網 如下 import requests import urllib.request if name main 指定ajax get請求的url 通過抓包進行獲取 url 定製請求頭資訊,相關的頭資訊必須封裝在字典結構中 headers import requests import urllib...
python爬蟲 爬取豆瓣網電影詳情
url 當滾輪滑動到底部時候 頁面會發起ajax請求 且請求一組電影詳情資料 當滾輪不滾動時候 頁面顯示的電影資料 通過瀏覽器位址列的url發起的請求是請求不到的 基於抓包工具進行全域性搜尋,鎖定動態載入資料對應的資料報即可,從資料報中可以提取請求的url和請求方式 請求引數 直接對位址列發起請求就...