爬取豆瓣TOP250-避免反爬虫(2021-10-09)
生活随笔
收集整理的這篇文章主要介紹了
爬取豆瓣TOP250-避免反爬虫(2021-10-09)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
不適合沒有爬蟲基礎的,自己寫著玩玩,其中的IP地址,也是爬取下來的,實時在變
注意:沒有對IP地址進行校驗
爬取豆瓣電影,豆瓣電影現在都有反爬蟲機制,我們采用2種方法:
導入需要的庫
import pandas as pd import requests from bs4 import BeautifulSoup import random import time隨機生產瀏覽器標識user-agent
#隨機生成User_agent,瀏覽器標識 def get_ua():first_num = random.randint(55, 76)third_num = random.randint(0, 3800)fourth_num = random.randint(0, 140)os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)','(Macintosh; Intel Mac OS X 10_14_5)']chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36','(KHTML, like Gecko)', chrome_version, 'Safari/537.36'])return ua獲取快代理的免費高密IP,第一頁
def get_ipinfo(soup,str_craw,key,value):a=soup.find(str_craw,attrs={key:value}).textreturn a #獲取快代理免費的高密IP#抓取快代理第一頁:類型,IP地址, ip_info=[]for i in range(2,3):#前1頁url=r"https://www.kuaidaili.com/free/inha/{}".format(i)headers = {'User-Agent':get_ua()}res=requests.get(url=url,headers=headers)soup=BeautifulSoup(res.text,'lxml')link_table=soup.find('tbody')for tr_data in link_table.find_all('tr'):dic={}ip=str(get_ipinfo(tr_data,'td','data-title','IP'))http=str(get_ipinfo(tr_data,'td','data-title','類型'))dic[http]=ipip_info.append(dic) len(ip_info)準備工作完成,開始進行爬取操作
先爬取電影鏈接
#獲取所有的電影鏈接 movie_href=[] for num in range(0,250,25):url='https://movie.douban.com/top250?'headers = {'User-Agent':get_ua()}proxy=random.choice(ip_info)params={'start':num}res=requests.get(url=url,headers=headers,params=params,proxies=proxy)soup=BeautifulSoup(res.text,'lxml')link_list=soup.find_all('div',attrs={'class':"hd"})for link in link_list:href_link=link.find('a').attrs['href']movie_href.append(href_link)print(len(movie_href))自定義一個爬取過程中的函數
def multi_craw(data,str_craw,key,value):#新列表存儲數據num_list=[]for num in data.find_all(str_craw,attrs={key:value}):num_list.append(num.text)return '/'.join(num_list)開始爬取
每部電影之間實現2s的延時,總耗時12min左右
#對所有的電影鏈接分別獲取信息 #電影名稱,導演,主演,豆瓣評分,評價人數,類型,制片國家/地區,語言,上映日期,片長,IMDb #獲取的信息全部存在列表中 movie_info_sum=[] i=0 for movie in movie_href:time.sleep(2)#每部電影的信息存在字典中dic={}headers = {'User-Agent':get_ua()}proxy=random.choice(ip_info)movie_res=requests.get(url=movie,headers=headers,proxies=proxy)movie_soup=BeautifulSoup(movie_res.text,'lxml')#電影名稱dic['電影名稱']=movie_soup.find('span',attrs={'property':"v:itemreviewed"}).text#導演dic['導演']=movie_soup.find('a',attrs={'rel':"v:directedBy"}).text#主演dic['主演']=multi_craw(movie_soup,'a','rel',"v:starring")#豆瓣評分dic['豆瓣評分']=movie_soup.find('strong',property="v:average").text#評價人數dic['評價人數']=movie_soup.find('span',property="v:votes").text#類型dic['類型']=multi_craw(movie_soup,'span','property',"v:genre")#制片國家/地區dic['制片國家/地區']=movie_soup.find('span',text='制片國家/地區:').next_sibling#語言dic['語言']=movie_soup.find('span',text='語言:').next_sibling#上映日期dic['上映日期']=multi_craw(movie_soup,'span','property',"v:initialReleaseDate")#片長dic['片長']=movie_soup.find('span',property="v:runtime").text#IMDbdic['IMDb']=movie_soup.find('span',text='IMDb:').next_sibling#一部電影信息爬取完成后,存在列表中,爬取下一步電影信息movie_info_sum.append(dic)i+=1print('{}{}{}'.format('爬取第',i,'部電影成功'))爬取到的數據使用pandas讀成DataFrame形式,并保存為csv文件
data=pd.DataFrame(movie_info_sum) data.to_csv(r'C:\Users\26053\Desktop\論文\Python\github\test\爬取豆瓣電影TOP250信息數據.csv') data.head()總結
以上是生活随笔為你收集整理的爬取豆瓣TOP250-避免反爬虫(2021-10-09)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于python的驾校管理系统的设计与实
- 下一篇: 图片转CAD文件如何转换?这个方法get