貓眼是一個很有影響力的電影數據分享平臺,今天,我們要對這個網站的數據進行爬取,當然了,這個只是最初級的數據爬取,後面我會對該網站的加密數據進行爬取,希望能繼續關注。
貓眼爬蟲:爬取評分前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()
歡迎大家關注我的公衆號 python學習號,
與大家分享爬蟲與數據分析相關的信息。謝謝