700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python小白入门爬虫1:豆瓣电影Top250

python小白入门爬虫1:豆瓣电影Top250

时间:2023-09-06 02:33:52

相关推荐

python小白入门爬虫1:豆瓣电影Top250

目标:爬取电影名、导演名、主演名、年份、国家、类型等中英文信息

11.4更新~

Debug总结:

1.因为是在介绍页进行提取,因此会发生导演名称缺省的问题,还有一些法文或者印度语之类的情况,不能被正则表达式匹配到…

2.中文导演名的正则表达式r’[\u4e00-\u9fa5]+·*[\u4e00-\u9fa5]*’

3、英文会出现/xa00这种情况,不能被写入文件

修改:

中文部分的修改:进入介绍页的具体电影链接href,爬取导演名或者演员名

import xlwtfrom bs4 import BeautifulSoupimport reheaders={'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36','Host':''}movie_ch_list=[]#movie_en_list=[]director_ch_list=[]#director_en_list=[]actor_ch_list=[]#actor_en_list=[]time_list=[]for i in range(0,10):try:url='/top250?start='+str(i*25)res=requests.get(url,headers=headers,timeout=10)res.raise_for_status()except:print('第'+str(i+1)+'页读取失效')continuesoup=BeautifulSoup(res.text,'lxml')div_list=soup.find_all('div',class_='hd')div1_list=soup.find_all('div',class_='bd')#div2_list=soup.find_all('div',class_='star')for each in div_list:mo=[]for child in each.a.children:if child.string=='\n':continuemo.append(child.string)movie_ch_list.append(mo[0])#movie_en_list.append(mo[1])k=0#记录进行到第几个电影for each in div1_list[1:]:a=each.p.text.split("导演:")[1].split("主演:")k=k+1try:a1=re.findall(r'[\u4e00-\u9fa5]+·*[\u4e00-\u9fa5]*',a[0])[0]#中文导演名#a2=a[0].replace(a1,"").split('\xa0')[0].strip(" ")#英文导演名b1=re.findall(r'[\u4e00-\u9fa5]+·*[\u4e00-\u9fa5]*',a[1])[0]#中文演员名#b2=a[1].replace(b1,"").split('\xa0')[0].strip(" ")#包含演员英文名和时间#a3=re.findall(r'[A-Za-z]+\s*[A-Za-z]*',b2)[0]#演员英文名a4=re.findall(r'[0-9]{4}',a[1])[0] except:url1=div_list[k-1].a.attrs['href']res1=requests.get(url1,headers=headers,timeout=10)soup1=BeautifulSoup(res1.text,'lxml')a1=soup1.find_all('a',attrs={"rel":"v:directedBy"})[0].stringb1=soup1.find_all('a',attrs={'rel':"v:starring"})[0].stringa4=soup1.find_all('span',attrs={'property':"v:initialReleaseDate"})[0].string[0:4]director_ch_list.append(a1)#director_en_list.append(a2)actor_ch_list.append(b1)#actor_en_list.append(a3)time_list.append(a4)fp="D:\\python学习\\douban250中文.csv"#fp1="D:\\python学习\\douban250英文.csv"f=open(fp,"w+")#f1=open(fp1,"w+")f.write("排名,中文电影名,中文导演名,中文演员名,时间\n")#f1.write("排名,英文电影名,英文导演名,英文演员名,时间\n")for i in range(0,250):f.write(str(i+1)+','+movie_ch_list[i]+','+director_ch_list[i]+','+actor_ch_list[i]+','+time_list[i]+','+'\n')f.close()

文件下载访问github链接:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。