【爬虫作业3】爬虫实战:运用正则表达式爬取猫眼电影排行

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

  • 爬取网站:https://maoyan.com/board/4
  • 爬取内容:电影名称(name),演员(actor),上映时间(year),评分(score)

2 实战练习

2.1 爬虫思路
  • 用requests库get请求爬取相关信息,加入请求头,防止被绊;
  • 用re库对爬取的数据进行筛选(主要使用findall方法,并添加re.S修饰符);
  • 爬取的数据进行csv存储;
  • 为防止被绊,代码中加入time sleep(2),每爬取一次休息2s;
  • 由于进行的是跨页筛选,url找规律并使用循环语句,爬取信息策略封装为1个小函数,进行循环爬取。
2.2 爬虫步骤
## 利用正则表达式爬取猫眼电影排行(rank,name,actor,play_time,score)
# 导入库,做好存储预备工作
import requests
import re
import time
import csv

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

# 加入请求头,利用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'
}

# 利用findall方法筛选所需数据,将该步骤封装为函数get_info
def get_info(url):
    res = requests.get(url, headers=headers)
    ranks = re.findall('(.*?)',res.text,re.S)
    names = re.findall(' .*?主演:(.*?)

',res.text,re.S) play_times = re.findall('

上映时间:(.*?)

',res.text,re.S) scores = re.findall('

(.*?)(.*?)

',res.text,re.S) for rank,name,actor,play_time,score in zip(ranks,names,actors,play_times,scores): writer.writerow([rank,name,actor.strip(),play_time,score[0]+score[1]) # # 设循环语句,循环爬取数据,每次中断2s防止被绊 if __name__ == '__main__': urls = ['https://maoyan.com/board/4?offset={}'.format(str(i)) for i in range(0,100,10)] for url in urls: get_info(url) time.sleep(2)
2.3 爬虫结果
猫眼电影排行

4 学习心得

  • 照葫芦画瓢写出了上述代码,开始re库筛选数据时有打印结果无问题,未去除多余内容,score分整数和小数部分,也未作处理。
  • 处理对策:开始是url写错了,{}后多了一个/,所以导致获取不到爬虫结果。去除多余内容方法actor.strip(),该方法在豆瓣爬虫中未成功使用;小数合并方法使用字符串加法,score[0] + score[1]。
  • 爬虫代码写好了,运行过程也未报错,要仔细检查每行代码的正确性,确保都能print再一起运行。

你可能感兴趣的:(【爬虫作业3】爬虫实战:运用正则表达式爬取猫眼电影排行)