猫眼是一个很有影响力的电影数据分享平台,今天,我们要对这个网站的数据进行爬取,当然了,这个只是最初级的数据爬取,后面我会对该网站的加密数据进行爬取,希望能继续关注。
猫眼爬虫:爬取评分前100的电影并存入数据库
爬取数据前准备:先创建数据库表,并生成我们想要的保存到数据库中的列名(电影名称-上映时间-评分)python代码如
import pymysql
def create():
db = pymysql.connect("localhost", "root", "liulinxs", "testdb")#连接数据库
#更改自己的密码和testdb,这个很重要,等下表单创建好了可以在Navicat for MySQL中查询。
'''
我这里的数据库名字是root,密码是liulinxs,你自己的不同得修改
'''
cursor = db.cursor()
'''
下面是创建表单的写法,2019moviedata是我新创立的表单,先检验是否存在,再建立!
'''
cursor.execute("DROP TABLE IF EXISTS moviescore")
#记得,两处地方都要修改,否则数据存储会出现问题。
sql = """CREATE TABLE moviescore(
name char(255),
date int(255),
score int(255))"""
cursor.execute(sql)
db.close()
create()
用Navicat for MySQL打开查看数据表,发现存在了该数据表。
即数据表创建成功,下面,我们对数据获取进行分析,首先看到首页
发现数据都存在dl标签下的dd标签里。
因此,我们可以采用xpath方法获取到dd标签,再获取到dd标签下数据。
代码如下:
url='https://maoyan.com/board/4?offset='+str(i)
head={}
head[
'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
resp = requests.get(url,headers=head)
print(resp.url)
html=etree.HTML(resp.text)
datas=html.xpath('//dl[@class="board-wrapper"]/dd')
for data in datas:
name=data.xpath('div/div/div/p[@class="name"]/a/text()')
date=data.xpath('div/div/div/p[@class="releasetime"]/text()')
score=data.xpath('div/div/div/p[@class="score"]/i/text()')
这里,我们发现score分数获取到的是一个列表
['9.', '3']
因此,我们要用join函数对该数据进行重组。
score=''.join(score)
得到
9.3
因此,就获取到了数据。用函数将数据存入mysql,即代码如下:
def insert(value):
db = pymysql.connect("localhost", "root", "liulinxs", "testdb")
cursor = db.cursor()
# 'movie_name,movie_date,movies_make,movie_type,movie_rate,movie_num,movie_income,movie_director,movie_actors'
sql = "INSERT INTO moviescore(name,date,score) VALUES (%s,%s,%s)"
try:
cursor.execute(sql, value)
db.commit()
print('插入数据成功')
except:
db.rollback()
print("插入数据失败")
db.close()
运行之后,就发现数据库里面数据已经存入:
爬虫完成。下面是完整代码
import requests
import pymysql
from lxml import etree
def get_data(i):
url='https://maoyan.com/board/4?offset='+str(i)
head={}
head[
'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
resp = requests.get(url,headers=head)
print(resp.url)
html=etree.HTML(resp.text)
datas=html.xpath('//dl[@class="board-wrapper"]/dd')
for data in datas:
name=data.xpath('div/div/div/p[@class="name"]/a/text()')
date=data.xpath('div/div/div/p[@class="releasetime"]/text()')
score=data.xpath('div/div/div/p[@class="score"]/i/text()')
print(score)
score=''.join(score)
#备注 写
print(score)
list1=(name,date,score)
insert(list1)
def insert(value):
db = pymysql.connect("localhost", "root", "liulinxs", "testdb")
cursor = db.cursor()
# 'movie_name,movie_date,movies_make,movie_type,movie_rate,movie_num,movie_income,movie_director,movie_actors'
sql = "INSERT INTO moviescore(name,date,score) VALUES (%s,%s,%s)"
try:
cursor.execute(sql, value)
db.commit()
print('插入数据成功')
except:
db.rollback()
print("插入数据失败")
db.close()
def main():
for i in range(10):
get_data(i*10)
# yield get_data(i*10)
print('已经获取到了%d页数据'%i)
main()