栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

前言

不适合没有爬虫基础的,自己写着玩玩,其中的IP地址,也是爬取下来的,实时在变
注意:没有对IP地址进行校验
爬取豆瓣电影,豆瓣电影现在都有反爬虫机制,我们采用2种方法:

  1. 不同浏览器标识:User_agent(模拟不同的浏览器)
  2. 不同的IP地址:proxies(防止IP地址被封)
  3. 爬取间隔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}).text
    return 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]=ip
        ip_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

    #IMDb
    dic['IMDb']=movie_soup.find('span',text='IMDb:').next_sibling

    #一部电影信息爬取完成后,存在列表中,爬取下一步电影信息
    movie_info_sum.append(dic)
    i+=1
    print('{}{}{}'.format('爬取第',i,'部电影成功'))

爬取到的数据使用pandas读成Dataframe形式,并保存为csv文件

data=pd.Dataframe(movie_info_sum)
data.to_csv(r'C:Users26053Desktop论文Pythongithubtest爬取豆瓣电影TOP250信息数据.csv')
data.head()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303992.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号