㈠ python爬蟲如何抓取豆瓣影評中的所有數據
你可以用前嗅爬蟲採集豆瓣的影評,我之前用的,還可以過濾只採集評分在6分以上的所有影評,非常強大,而且他們軟體跟資料庫對接,採集完數據後,直接入庫,導出excel表。很省心。
㈡ 怎樣避開豆瓣對爬蟲的封鎖,從而抓取豆瓣上電影內容
在互聯網中,有網路爬蟲的地方,絕對少不了反爬蟲的身影。網站反爬蟲的攔截前提是要正確區分人類訪問用戶和網路機器人,當發現可疑目標時,通過限制IP地址等措施阻止你繼續訪問。爬蟲該如何突破反爬蟲限制?
一、構建合理的HTTP請求頭
HTTP的請求頭是在你每次向網路伺服器發送請求時,傳遞的一組屬性和配置信息。由於瀏覽器和Python爬蟲發送的請求頭不同,有可能被反爬蟲檢測出來。
二、設置cookie的學問
Cookie是一把雙刃劍,有它不行,沒它更不行。網站會通過cookie跟蹤你的訪問過程,如果發現你有爬蟲行為會立刻中斷你的訪問,比如你特別快的填寫表單,或者短時間內瀏覽大量頁面。而正確地處理cookie,又可以避免很多採集問題,建議在採集網站過程中,檢查一下這些網站生成的cookie,然後想想哪一個是爬蟲需要處理的。
三、正常的時間訪問路徑
合理控制採集速度,是Python爬蟲不應該破壞的規則,盡量為每個頁面訪問時間增加一點兒間隔,可以有效幫助你避免反爬蟲。
四、使用http
對於分布式爬蟲和已經遭遇反爬蟲的人來說,使用http將成為你的首選。Ipidea分布地區廣,可滿足分布式爬蟲使用需要。支持api提取,對Python爬蟲來說再適合不過。
㈢ Python豆瓣電影《肖申克的救贖》評論爬取
先看效果圖:
地址:( https://movie.douban.com/subject/1292052/comments?sort=time&status=P)
爬取前1w條評論
存儲成txt文檔
數據預處告攜理
中文分詞
統計top10的高頻詞
可視化展示高頻詞
根據詞頻生成詞雲
審核評論
================================================================
配置准備
中文分詞需要jieba
詞雲繪制需要wordcloud
可視化展示中需要的中文字體
網上公開資源中找一個中咐桐文停用詞表
根據分詞結果自己製作新增詞襪簡伏表
准備一張詞雲背景圖(附加項,不做要求)
paddlehub配置
#安裝jieba分詞和詞雲
pip install jieba
pip install wordcloud
#安裝paddle
pip install --upgrade PaddlePaddle
#安裝模型
#hub install porn_detection_lstm==1.1.0
pip install --upgrade paddlehub
pip install numpy
#安裝Beautifulsoup
pip install BeautifulSoup4
Github地址: https://github.com/mikite/python_sp_shawshank
有可能遇到的問題:
1.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 1: invalid continuation byte
解決方法:
1.不使用urlLib換做requests
2.去掉請求頭中的 'Accept-Encoding': 'gzip, deflate, br'
3.返回值reponse 轉字元串指定編碼utf-8
# 'Accept-Encoding': 'gzip, deflate, br',
2.關於cookie
解決方法:
1.去豆瓣請求頭中復制cookie設置到請求頭中
'Cookie': 'bid=WD6_t6hVqgM'
3.請求返回418的問題
解決方案模擬設置請求頭,設置user-agent
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
4.使用beautifulsoup獲取不到評論
解決方法:
第一步:指定解析參數為'lxml'
soupComment = BeautifulSoup(html, 'lxml')
第二步:
findAll方法指定css文件的class名
print('網頁內容:', soupComment.prettify())
comments = soupComment.findAll(class_='short')
點擊獲取源碼
㈣ python怎麼抓取豆瓣電影url
#!/usr/bin/env python2.7# encoding=utf-8"""
爬取豆瓣電影TOP250 - 完整示例代碼
"""import codecsimport requestsfrom bs4 import BeautifulSoup
DOWNLOAD_URL = 'httn.com/top250/'def download_page(url):
return requests.get(url, headers={ 'User-Agent'頃局鬧: '臘御Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}).contentdef parse_html(html):
soup = BeautifulSoup(html)
movie_list_soup = soup.find('ol', attrs={'class': 'grid_view'})
movie_name_list = [] for movie_li in movie_list_soup.find_all('li'):
detail = movie_li.find('div', attrs={'class': 'hd'})
movie_name = detail.find('span', attrs={'class': 'title'}).getText()
movie_name_list.append(movie_name)
next_page = soup.find('span', attrs={'class': 'next'}).find('a') if next_page: return movie_name_list, DOWNLOAD_URL + next_page['href'] return movie_name_list, Nonedef main():
url = DOWNLOAD_URL with codecs.open('movies', 'wb', encoding='utf-8') as fp: while url:
html = download_page(url)
movies, url = parse_html(html)
fp.write(u'{movies}\n'.format(movies='\n'.join(movies)))if __name__ == '__main__':
main()0414243444546474849505152
簡單說明下,在目錄雀罩下會生成一個文檔存放電影名。python2
㈤ .利用python獲得豆瓣電影前30部電影的中文片名,排名,導演,主演,上映時間
熱門頻道
首頁
博客
研修院
VIP
APP
問答
下載
社區
推薦頻道
活動
招聘
專題
打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
打開APP
python 網路爬蟲 1.2 獲取豆瓣TOP250電影的中英文名、港台名、導演、上映年份、電影分類以及評分,將數據存入文檔。 原創
2021-07-19 01:03:15
2點贊
zynaln
碼齡8年
關注
題目:
獲取豆瓣TOP250電影的中英文名、港台名、導演、上映年份、電影分類以及評分,將數據存入文檔。
代攔枯衫碼:
輸出結果:
文章知識點與官方知識檔案匹配
Python入門技能樹網路爬蟲urllib
201761 人正在系統學敗租習中
打開CSDN APP,看更多技術內容
最新發布 用python爬取豆瓣影評及影片信簡腔息(評論時間、用戶ID、評論內容)
用python爬取豆瓣影評及影片信息(評論時間、用戶ID、評論內容)
繼續訪問
python
寫評論
7
14
2
踩
分享
㈥ python bs4怎麼抓豆瓣評論做詞頻表
根據詞頻生成詞雲。
該程序進行爬取豆瓣熱評,將爬取的評論(json文件)保存到與該python文件同一級目錄下注意需要下載這幾個庫:requests、lxml、json、time,該程序將json中的數據進行處理,提取重要信息,並用wordcloud庫製作詞雲圖片,同樣保存到與該python文件同一級目錄下注意需要下載這幾個庫:jieba、wordcloud、json。
Python是一種跨平台的計算機程序設計語言是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用於獨立的、大型項目的開發。
㈦ python爬蟲看電影會有什麼影響
閑著在家想看電影,但是猛地不知道要看啥電影,腦子想半天也想不出來一個好電影名字!乾脆直接在豆瓣電影上獲取最近熱門的電影,然後一個一個挨著看打發時間!
獲取豆瓣電影信息也是學爬蟲的一個入門例子,不知道為啥好多人學爬蟲都拿豆瓣電影來練薯銷手,一個應該是爬取比較簡單,另一個應該是這個平台反爬措施比較low,接下來讓我們來看看怎麼去實現獲取豆瓣電影前200個熱門電影信息!
1.請求數據
第一步先打開豆瓣電影網頁,分析請求看怎樣才能請求到數據。
刷新豆瓣電影網頁,從瀏覽器自帶的開發工具network中XHR可以看到各種請求,其中標黃的search_subject?type_movie這個請求就是請求電影信息,下面的type_tv就是請求電視劇信息的。從右邊標黃的request url中看到是請求的鏈接,但參數信息都被編碼,用urllib.parse.unquote()方法來進行解碼:
解碼後的請求連接如圖所示,猜想page_limt為每次請求到的數據量,page_start為從第幾頁開始請求,將這個鏈接在瀏覽器中打開來驗證一下猜想。
看到返回的是一個json字元串,裡麵包含50條電影信息,其中有名字,評分,鏈接等,將page_start = 0 變為1,就請求到下一個50條信息。根據鏈接的這個規律,可以對page_start 不斷賦值,從而實現多條信息的獲取!(公眾號 ly戲說編程)
第二步構造廳衫請求頭,即看看瀏覽器通過這個鏈接向伺服器發送了什麼請求參數才拿到這些json數數伏游據,打開瀏覽器開發者工具。
按照圖中1到4步可以看到這個請求的request headers,將請求頭裡面的信息全部拿出來,構造為爬蟲的請求頭。
坑:請求頭構造的時候Accept-Encoding要將br去掉。原因:Accept-Encoding用來聲明瀏覽器支持的編碼類型,一般有gzip,deflate,br 等等。但在python3的requests包中:
response.content 位元組方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮 類型:bytes
reponse.text 字元串方式的響應體,會自動根據響應頭部的字元編碼進行解碼。類型:str
但偏偏不支持br的解碼,如果加上br可能造成你請求回來的是亂碼!所以要去掉br!
這樣通過模擬瀏覽器請求數據,就可以得到伺服器返回的json字元串,再解析json字元串得到每一個電影的詳情鏈接。
2.提取信息
在得到每一個電影的鏈接後,依次訪問每一個電影的鏈接,然後根據關鍵信息所在標簽用xpath進行提取。這里只對電影名字、年份、導演、類型、評分進行提取。
例如提取1917,在網頁右擊「1917」,然後選擇檢查,在Elements中1917所在位置右擊,選擇Copy,然後Copy XPath即可拿到1917的Xpath路徑,其它信息的提取操作步驟一樣。
但是不同電影網頁裡面相同類型的信息所在的XPath路徑可能不同,這就需要找到他們的相同處,提取相同的XPath路徑,從而進行大批量提取。
比如電影類型,用直接 xpath的方法就不好使,不同電影網頁裡面電影類型所處的標簽位置不同,用 xpath拷貝出來的路徑有差異,這就需要根據所在標簽的property屬性來獲取。主要代碼如下:
對每一網頁鏈接裡面的信息進行提取,這里每提取一個就停1s,為的是避免平台檢測到異常訪問,這樣就拿到每一個電影的信息,然後再將這信息保存到excel中,效果如圖所示
前幾名都是奧斯卡得獎電影有木有!感興趣的小夥伴快來試試!話不多說,挨著去看電影咯!去哪看?去公眾號 ly戲說編程 首頁vip影院看,裡面還有各種學習資源免費分享!
㈧ Python爬蟲實戰(1)requests爬取豆瓣電影TOP250
爬取時間:2020/11/25
系統環境:Windows 10
所用工具:Jupyter NotebookPython 3.0
涉及的庫:requestslxmlpandasmatplotlib
umpy
蛋肥想法: 先將電影名稱、原名、評分、評價人數、分類信息從網站上爬取下來。
蛋肥想法: print數據列表後發現電影原名、分類信息等存在不需要的字元,需預先處理;同時因為後續想做一個豆瓣電影TOP250的維度分布圖,而同一電影存在多個發行國家、類型(如「法國 美國 / 劇情祥備 動作 犯罪」),為了簡(偷)便(懶),這里均取第一個作為記入的數據;最後將數據保存為xlsx。
蛋肥想法: 蛋肥想知道在豆瓣電影TOP250中年份、國家、類型的維度數據,為了練手,使用剛帶余才保存成xlsx的數據,並分別畫成雷達圖、柱形圖、扇謹行毀形圖。
㈨ Python抓取豆瓣電影排行榜
1.觀察url
首先觀察一下網址的結構 http://movie.douban.com/top250?start=0&filter=&type= :
可以看到,問號?後有三個參數 start、filter、type,其中start代表頁碼,每頁展示25部電影,0代表第一頁,以此類推25代表第二頁,50代表第三頁...
filter顧名思義,是過濾已經看過的電影,filter和type在這里不重要,可以不管。
2.查看網頁源代碼
打開上面的網址,查看源代碼,可以看到信息的展示結構如下:
1 <ol class="grid_view"> 2 <li> 3 <div class="item"> 4 <div class="pic"> 5 <em class="">1</em> 6 <a href="http://movie.douban.com/subject/1292052/"> 7 <img alt="肖申克的救贖" src="http://img3.douban.com/view/movie_poster_cover/ipst/public/p480747492.jpg" class=""> 8 </a> 9 </div>10 <div class="info">11 <div class="hd">12 <a href="http://movie.douban.com/subject/1292052/" class="">13 <span class="title">肖申克的救贖</span>14 <span class="title"> / The Shawshank Redemption</span>15 <span class="other"> / 月黑高飛(港) / 刺激1995(台)</span>16 </a>17 18 19 <span class="playable">[可播放]</span>20 </div>21 <div class="bd">22 <p class="">23 導演: 弗蘭克·德拉邦特 Frank Darabont 主演: 蒂姆·羅賓斯 Tim Robbins /...<br>24 1994 / 美國 / 犯罪 劇情25 </p>26 27 28 <div class="star">29 <span class="rating5-t"><em>9.6</em></span>30 <span>646374人評價</span>31 </div>32 33 <p class="quote">34 <span class="inq">希望讓人自由。</span>35 </p>36 </div>37 </div>38 </div>39 </li>
其中<em class="">1</em>代表排名,<span class="title">肖申克的救贖</span>代表電影名,其他信息的含義也很容易能看出來。
於是接下來可以寫正則表達式:
1 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?' 2 + u'<em.*?class="">(.*?)</em>.*?' 3 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)' 4 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?' 5 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?' 6 + u'<div.*?class="bd">.*?<p.*?class="">.*?' 7 + u'導演: (.*?) ' 8 + u'主演: (.*?)<br>' 9 + u'(.*?) / (.*?) / '10 + u'(.*?)</p>'11 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'12 + u'.*?<span>(.*?)人評價</span>.*?<p.*?class="quote">.*?'13 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)
在此處flag參數re.S代表多行匹配。
3.使用面向對象的設計模式編碼
代碼如下:
1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 import sys 6 7 class MovieTop250: 8 def __init__(self): 9 #設置默認編碼格式為utf-810 reload(sys)11 sys.setdefaultencoding('utf-8')12 self.start = 013 self.param = '&filter=&type='14 self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}15 self.movieList = []16 self.filePath = 'D:/coding_file/python_file/File/DoubanTop250.txt'17 18 def getPage(self):19 try:20 URL = 'http://movie.douban.com/top250?start=' + str(self.start)21 request = urllib2.Request(url = URL, headers = self.headers)22 response = urllib2.urlopen(request)23 page = response.read().decode('utf-8')24 pageNum = (self.start + 25)/2525 print '正在抓取第' + str(pageNum) + '頁數據...' 26 self.start += 2527 return page28 except urllib2.URLError, e:29 if hasattr(e, 'reason'):30 print '抓取失敗,具體原因:', e.reason31 32 def getMovie(self):33 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?'34 + u'<em.*?class="">(.*?)</em>.*?'35 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)'36 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?'37 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?'38 + u'<div.*?class="bd">.*?<p.*?class="">.*?'39 + u'導演: (.*?) '40 + u'主演: (.*?)<br>'41 + u'(.*?) / (.*?) / '42 + u'(.*?)</p>'43 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'44 + u'.*?<span>(.*?)人評價</span>.*?<p.*?class="quote">.*?'45 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)46 while self.start <= 225:47 page = self.getPage()48 movies = re.findall(pattern, page)49 for movie in movies:50 self.movieList.append([movie[0], movie[1], movie[2].lstrip(' / '),
51 movie[3].lstrip(' / '), movie[4],
52 movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),53 movie[9], movie[10], movie[11]])54 55 def writeTxt(self):56 fileTop250 = open(self.filePath, 'w')57 try:58 for movie in self.movieList:59 fileTop250.write('電影排名:' + movie[0] + '\r\n')60 fileTop250.write('電影名稱:' + movie[1] + '\r\n')61 fileTop250.write('外文名稱:' + movie[2] + '\r\n')62 fileTop250.write('電影別名:' + movie[3] + '\r\n')63 fileTop250.write('導演姓名:' + movie[4] + '\r\n')64 fileTop250.write('參與主演:' + movie[5] + '\r\n')65 fileTop250.write('上映年份:' + movie[6] + '\r\n')66 fileTop250.write('製作國家/地區:' + movie[7] + '\r\n')67 fileTop250.write('電影類別:' + movie[8] + '\r\n')68 fileTop250.write('電影評分:' + movie[9] + '\r\n')69 fileTop250.write('參評人數:' + movie[10] + '\r\n')70 fileTop250.write('簡短影評:' + movie[11] + '\r\n\r\n')71 print '文件寫入成功...'72 finally:73 fileTop250.close()74 75 def main(self):76 print '正在從豆瓣電影Top250抓取數據...'77 self.getMovie()78 self.writeTxt()79 print '抓取完畢...'80 81 DouBanSpider = MovieTop250()82 DouBanSpider.main()
代碼比較簡單,最後將信息寫入一個文件,沒有什麼需要解釋的地方。