日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬取豆瓣TOP250-避免反爬虫(2021-10-09)

發布時間:2023/12/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬取豆瓣TOP250-避免反爬虫(2021-10-09) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

不適合沒有爬蟲基礎的,自己寫著玩玩,其中的IP地址,也是爬取下來的,實時在變
注意:沒有對IP地址進行校驗
爬取豆瓣電影,豆瓣電影現在都有反爬蟲機制,我們采用2種方法:

  • 不同瀏覽器標識:User_agent(模擬不同的瀏覽器)
  • 不同的IP地址:proxies(防止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)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。