爬取豆瓣电影top250

引言

为实现豆瓣top50电影在一个Excel表中一览无遗~

豆瓣电影top250/爬取时间20211005

【存在问题】

一次性写入csv存在问题:

UnicodeEncodeError: 'gbk' codec can't encode character '\xee' in position 59: illegal multibyte sequence

如果你想一下子爬下来,本代码无法实现。

思路

html比较清晰的字段,可以一下子爬取250条;稍微混乱点的,或者存在空字段的采取了分页爬取措施。

影片、上映年份、评分、评价人数一下子爬取250条;其余分页爬取,分别是导演主演、地区类型、一句话总概括。

下面的代码最重要的部分是

obj=re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<电影名>.*?)</span>',re.S)

如何找出你要的内容,参考python爬虫入门(6)爬取豆瓣电影top250

1.影片

# 需要的库
import requests
import re 
# 250
for i in range(0,250,25):
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
    
    #测试一下,爬取电影名
    obj=re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<电影名>.*?)</span>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("电影名"))

2.上映年份

# 250
for i in range(0,250,25):
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
    
    #测试一下,爬取年份
    obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?<br>(?P<年份>.*?)&nbsp',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("年份").strip())

3.评分

# 250
for i in range(0,250,25):
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
    
    #评分
    obj=re.compile(r'<li>.*?<div class="item">.*?<span class="rating_num" property="v:average">(?P<评分>.*?)</span>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("评分").strip())

4.评价人数

# 250
for i in range(0,250,25):
    url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
    headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
    resp=requests.get(url,headers=headers)
    page_content=resp.text # html
    
    #评价人数
    obj=re.compile(r'<li>.*?<div class="item">.*?<span>(?P<评价人数>.*?)人评价</span>',re.S)
    ret = obj.finditer(page_content)#页面源码代入解析
    for it in ret:
        print(it.group("评价人数").strip())

5.导演主演

i=225 #你要爬取的是哪一页
url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
resp=requests.get(url,headers=headers)
page_content=resp.text # html
    
#爬取一页的,导演主演
obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?(?P<导演主演>.*?)<br>',re.S)
ret = obj.finditer(page_content)#页面源码代入解析
for it in ret:
    print(it.group("导演主演").strip())

6.地区类型

i=225
url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
resp=requests.get(url,headers=headers)
page_content=resp.text # html
    
#爬取一页的,地区类型
obj=re.compile(r'<li>.*?<div class="item">.*?<p class="">.*?&nbsp;/&nbsp;(?P<地区类型>.*?)</p>',re.S)
ret = obj.finditer(page_content)#页面源码代入解析
for it in ret:
    print(it.group("地区类型").strip())

7.一句话总概括

i=200
url = "https://movie.douban.com/top250?start="+str(i)+"&filter="
headers = {
            "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
        }
resp=requests.get(url,headers=headers)
page_content=resp.text # html
    
#爬取一页的,经典台词
obj=re.compile(r'<li>.*?<div class="item">.*?<span class="inq">(?P<经典台词>.*?)</span>',re.S)
ret = obj.finditer(page_content)#页面源码代入解析
for it in ret:
    print(it.group("经典台词"))

可以看出导演主演,地区类型是一起爬出的,由于数据比较少,就在Excel中直接进行单元格切分处理了。

posted on 2021-10-05 11:17  cookie的笔记簿  阅读(217)  评论(0编辑  收藏  举报