本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在上篇文章中,运用的是面向过程思想,即分析出解决问题所需要的步骤,然后按照步骤一步一步的通过代码解决问题;
这篇文章运用的是面向对象思想,即把构成问题的解决方案分解成一个一个对象,通过对象来描述解决问题的步骤中的行为。
不多说,上才艺(代码)
注:--init--用来数据属性的初始化工作,也可以认为是对实例的构造方法,即接受类的实例self并对其进行构造
import requests
from lxml import etree
import pandas as pd
class MaoYan:
def __init__(self):
self.base_url = 'https://maoyan.com/board/4?offset={}'
self.headers = {
'Referer': 'https://maoyan.com/board/4?requestCode=e83854272b2bff27fb25137346aeb714bbj90&offset=10',
'Cookie': '__mta=247404475.1629885283786.1629887482215.1629893884124.8; uuid_n_v=v1; uuid=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; _csrf=0032460ef4cb4cbc03a01838a3100aeb3daef130e0ac4b0cd03e52ab9ff596fb; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1628220737,1628236529,1628653354,1629885284; _lxsdk_cuid=17a469fab1dc8-04e619bda8b373-3f356b-144000-17a469fab1dc8; _lxsdk=7868E9D0058A11ECAEE0416AA74DE6B1A0A2AC49E1604153A8082BAC6B403331; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1629893884; _lxsdk_s=17b7d3ef5ea-f43-47d-9b1%7C%7C3',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
self.df = []
self.columns = ['排名', '片名', '主演', '上映时间', '评分']
# 包含提取、解析数据,存储数据
def parse(self):
for i in range(10):
url = self.base_url.format(str(i * 10))
response = requests.get(url, headers=self.headers)
print(response.text)
html = response.text
xp = etree.HTML(html)
# print(xp)
lis = xp.xpath('//*[@id="app"]/div/div/div[1]')
# print(lis)
for li in lis:
for n in range(0, 10):
paiming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/i/text()')[n]
pianming = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/text()')[n]
zhuyan = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()')[n].strip().replace("主演:", "")
shijian = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()')[n].replace("上映时间:", "")
# 由于评分被拆成了两个i节点,所有要分别获取并进行拼接
score1 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[1]/text()')[n]
score2 = li.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[2]/text()')[n]
score = score1 + score2
# return [paiming, pianming, zhuyan, shijian, score]
b = self.df.append([paiming, pianming, zhuyan, shijian, score])
# dataframe是二维数组,columns将上面的标题行插入到二维数组中
d = pd.DataFrame(self.df, columns=self.columns)
# index=False表示输出不显示索引值
d.to_excel("猫眼电影1.xlsx", index=False)
if __name__ == '__main__':
maoyan = MaoYan()
maoyan.parse()