【爬虫练习】运用正则表达式爬取豆瓣电影排行

2018-08-14  本文已影响382人  猪猪头看世界

1. 实战任务:运用正则表达式爬取豆瓣电影排行

2 实战练习

2.1 爬虫思路
2.2 爬虫步骤
## 利用正则表达式爬取豆瓣电影排行(rank,name,actor,score,comment,quote)
# 导入库,做好存储预备工作
import requests
import re
import time
import csv

f = open('C:/Users/home/Desktop/3.csv','w+',encoding='utf-8',newline='')
writer = csv.writer(f)
writer.writerow(['rank','name','actor','score','comment','quote'])


# 加入请求头,利用requests请求,爬取数据
headers = {
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 }

url = 'https://movie.douban.com/top250'

# 利用findall方法筛选所需数据,将该步骤封装为函数get_info
def get_info(url):
    res = requests.get(url, headers=headers)
    ranks = re.findall(' <em class="">(.*?)</em>',res.text,re.S)
    names = re.findall('<span class="title">(.*?)</span>.*?<span class="title">&nbsp;/&nbsp;(.*?)</span>.*?<span class="other">&nbsp;/&nbsp;(.*?)  /  (.*?)</span>',res.text,re.S)
    actors = re.findall('<p class="">.*?(.*?)&nbsp;&nbsp;&nbsp;(.*?)...<br>.',res.text,re.S)
    scores = re.findall('<span class="rating_num" property="v:average">(.*?)</span>',res.text,re.S)
    comments = re.findall('<span property="v:best" content="10.0"></span>.*?<span>(.*?)人评价</span>.*?</div>',res.text,re.S)
    quotes = re.findall('<span class="inq">(.*?)</span>',res.text,re.S)

    for rank,name,actor,score,comment,quote in zip(ranks,names,actors,scores,comments,quotes):
        writer.writerow([rank,name,actor,score,comment,quote])


# 设循环语句,循环爬取数据,每次中断2s防止被绊
if __name__ == '__main__':
   urls = ['https://movie.douban.com/top250?start={}&filter='.format(str(i)) for i in range(0,250,25)]
   for url in urls:
       get_info(url)
       time.sleep(2)
2.3 爬虫结果
豆瓣电影排行

2.4 存在的问题

上述代码基本可以获取想要的数据,但存在很多问题:

上一篇 下一篇

猜你喜欢

热点阅读