python 爬取猫眼电影top100数据

最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel。

  • 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据
  • 使用语言:python
  • 工具:PyCharm
  • 涉及库:requests、re、openpyxl(高版本excel操作库)

实现代码

猫眼电影Robots

 1 # -*- coding: utf-8 -*-
 2 # @Author  : yocichen
 3 # @Email   : [email protected]
 4 # @File    : MaoyanTop100.py
 5 # @Software: PyCharm
 6 # @Time    : 2019/11/6 9:52
 7 
 8 import requests
 9 from requests import RequestException
10 import re
11 import openpyxl
12 
13 # Get page's html by requests module
14 def get_one_page(url):
15     try:
16         headers = {
17             'user-agent':'Mozilla/5.0'
18         }
19         # use headers to avoid 403 Forbidden Error(reject spider)
20         response = requests.get(url, headers=headers)
21         if response.status_code == 200 :
22             return response.text
23         return None
24     except RequestException:
25         return None
26 
27 # Get useful info from html of a page by re module
28 def parse_one_page(html):
29     pattern = re.compile('
.*?board-index.*?>(\d+)<.*?' 30 +'.*?data-src="(.*?)".*?.*?star">[\\s]*(.*?)[\\n][\\s]*

.*?
' 31 +'releasetime">(.*?)

.*?integer">(.*?).*?
' 32 +'fraction">(.*?).*?
', re.S) 33 items = re.findall(pattern, html) 34 return items 35 36 # Main call function 37 def main(url): 38 page_html = get_one_page(url) 39 parse_res = parse_one_page(page_html) 40 return parse_res 41 42 # Write the useful info in excel(*.xlsx file) 43 def write_excel_xlsx(items): 44 wb = openpyxl.Workbook() 45 ws = wb.active 46 rows = len(items) 47 cols = len(items[0]) 48 # First, write col's title. 49 ws.cell(1, 1).value = '编号' 50 ws.cell(1, 2).value = '片名' 51 ws.cell(1, 3).value = '宣传图片' 52 ws.cell(1, 4).value = '主演' 53 ws.cell(1, 5).value = '上映时间' 54 ws.cell(1, 6).value = '评分' 55 # Write film's info 56 for i in range(0, rows): 57 for j in range(0, cols): 58 # print(items[i-1][j-1]) 59 if j != 5: 60 ws.cell(i+2, j+1).value = items[i][j] 61 else: 62 ws.cell(i+2, j+1).value = items[i][j]+items[i][j+1] 63 break 64 # Save the work book as *.xlsx 65 wb.save('maoyan_top100.xlsx') 66 67 if __name__ == '__main__': 68 res = [] 69 url = 'https://maoyan.com/board/4?' 70 for i in range(0, 10): 71 if i == 0: 72 res = main(url) 73 else: 74 newUrl = url+'offset='+str(i*10) 75 res.extend(main(newUrl)) 76 # test spider 77 # for item in res: 78 # print(item) 79 # test wirte to excel 80 # res = [ 81 # [1, 2, 3, 4, 9], 82 # [2, 3, 4, 5, 9], 83 # [4, 5, 6, 7, 9] 84 # ] 85 86 write_excel_xlsx(res)

目前的效果

python 爬取猫眼电影top100数据_第1张图片

后记

入门了一点后发现,如果使用正则表达式和requests库来实行进行数据爬取的话,分析HTML页面结构和正则表达式的构造是关键,剩下的工作不过是替换url罢了。

你可能需要的 GitHub 传送门


补充一个分析HTML构造正则的例子

猫眼经典科幻按照评价排序

审查元素我们会发现每一项都是

****
格式

python 爬取猫眼电影top100数据_第2张图片

 我想要获取电影名称和评分,先拿出HTML代码看一看

python 爬取猫眼电影top100数据_第3张图片

试着构造正则

'.*?

.*?movie-item-title.*?title="(.*?)">.*?integer">(.*?)<.*?fraction">(.*?)<.*?
' (随手写的,未经验证)


 

参考资料

【B站视频 2018年最新Python3.6网络爬虫实战】https://www.bilibili.com/video/av19057145/?p=14

【猫眼电影robots】https://maoyan.com/robots.txt (最好爬之前去看一下,那些可爬那些不允许爬)

 

你可能感兴趣的:(python 爬取猫眼电影top100数据)