本來是想爬國產電影,但是發現好像不太行,我是按照年份,結果里面什么都有這就比較尷尬了
import requestsimport stringfrom bs4 import BeautifulSoupimport pandasimport timeimport numpy as npimport xlsxwriterimport removie_select=[]#修改請求頭文件,避免封Firefox/3.5.6'},{'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}]def getmovie(str_x): res=requests.get('https://movie.douban.com/tag/'+str_x+'?start=0&type=T',headers=hds[np.random.randint(0,len(hds))])#GET獲取網站資源 res.encoding='utf-8' soup=BeautifulSoup(res.text, 'html.parser') #獲取一共有多少頁數 paginator=soup.select('.article')[0].text #PRint(paginator) paginator=soup.select('.paginator a')[-2].text paginator=int(paginator) #獲取該年所有的電影網頁 url='https://movie.douban.com/tag/'+str_x+'?start={}&type=T' for i in range(0,paginator): #隨機睡眠時間,防止封IP time.sleep(np.random.rand() * 5) #um=int(i) #print('開始進行第'+(um+1)+'頁搜索') movieurl=url.format(i*20) #隨機抓去一個請求頭 res1=requests.get(movieurl,headers=hds[np.random.randint(0,len(hds))]) res1.encoding='utf-8' soup1=BeautifulSoup(res1.text, 'html.parser') for link in soup1.select('.pl2')[:20]: #隨機睡眠時間,防止封IP time.sleep(np.random.rand() * 5) movie = {} #獲取該電影的詳情網頁 try: h2=link.select('a')[0]['href'] except IndexError: continue res2=requests.get(h2) res2.encoding='utf-8' soup2=BeautifulSoup(res2.text, 'html.parser') #獲得電影的發行國家/地區 try: info = soup2.select('#info')[0] except IndexError: continue try: movie_from=re.findall('(?<=制片國家/地區: ).+?(?=/n)', info.text)[0] except IndexError: continue #獲取該電影的評分 rating_num='0' try: rating_num=link.select('.rating_nums')[0].text except IndexError: continue #if(movie_from[0]==('中' or '香' or '臺')and float(rating_num)>=8.0): #這個判斷是只判斷是否評分達到8.0,上面的判斷是否為國產的 if(float(rating_num)>=8.0):#滿足電影評分達到8.0以上 #獲取電影名稱 try: name=soup2.select('#content h1 span')[0].text except IndexError: continue movie['電影評分']=rating_num movie['電影名稱']=name print(name,rating_num) movie_select.append(movie) df=pandas.DataFrame(movie_select) #保存成Excel文件 df.to_excel(str_x+'高分電視劇/綜藝節目/紀錄片/電影.xlsx')for x in range(2015,2017): str_x=str(x) getmovie(str_x)要是有什么不懂的,我都在必要的位置設置了注釋1.關于被封IP,這個地方我加了一個修改請求頭和兩個睡眠時間,可以防止封IP,但是豆瓣有API,也就是說,你可以用她的API去爬蟲
2.關于爬作品的發行地區,我采取的辦法,是一個正則表達式,這樣的話就可以找到,因為發行地區那一欄,她沒有任何標簽,所以比較尷尬
新聞熱點
疑難解答