1. 程式人生 > >python3爬蟲豆瓣top250電影(並儲存到mysql資料庫)

python3爬蟲豆瓣top250電影(並儲存到mysql資料庫)

所用到的模組(需要提前安裝好):

requests、BeautifulSoup、lxml、mysql.connector(或者pymysql也可以,如果不想插入到資料庫,只需要將裡邊相關的程式碼刪除)

(程式碼下邊將貼出本文beautifulsoup的使用)

程式碼:

import requests
from bs4 import BeautifulSoup
import mysql.connector


def get_pages_link():
    # 插入到資料庫
    conn = mysql.connector.connect(user='root', password='root', database='test')
    cursor = conn.cursor()

    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
        'Connection': 'keep-alive'
    }

    for item in range(0, 250, 25):
        url = "https://movie.douban.com/top250?start={}".format(item)
        web_data = requests.get(url, headers=header)
        soup = BeautifulSoup(web_data.content, 'lxml')
        for movie in soup.select('#wrapper li'):

            #href = movie.select('.hd > a')[0]  # 連結
            href=movie.find('a')["href"]
            name = movie.select('.hd > a > span')[0].text  # 片名
            star = movie.select('.rating_num')[0].text  # 評分
            people = movie.select('.star > span')[3].text  # 評價人數
            try:
                quote = movie.select('.inq')[0].text
            except:
                print('沒有quote哦')
                quote = None
            data = {
                # 'url': href,
                '評分': star,
                '片名': name,
                '名言': quote,
                '評價人數': people
            }
            sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
                float(star), name, quote, people)
            cursor.execute(sql)
            conn.commit()

            print(data)
            # print(movie)
        print('\n' + '-' * 50 + '\n')
    # 關閉資料庫
    cursor.close()
    conn.close


if __name__ == '__main__':
    get_pages_link()

因為這個爬蟲是跟著微信裡的一篇文章學的,所以設定為轉載~

裡邊的加入到mysql資料庫是自己邊寫邊學的,然而下邊這行程式碼困擾了我一個上午!

sql = 'insert into doubantop250(score,name,quote,people) values (%f,%s,%s,%s)' % (
    float(star), name, quote, people)

本來這事很正常的插入資料庫的操作,但一直報錯,因為字串是漢字型別的,自己寫小demo是可以插入字母、數字的,但是一到漢字這就報錯,,後來查了好多內容才知%s需要加引號。。。。

sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
                float(star), name, quote, people)

最後,因為自己在學python爬蟲,想學習python爬蟲的可以加群678458826,互相探討學習,進步!

----------------------------------------------------------------我是分割線----------------------------------------------------------------------------

下邊講一下從程式碼裡學到的東西:

soup = BeautifulSoup(web_data.content, 'lxml')

將html內容解析為soup文件

soup.select('#wrapper li')

獲取文件裡邊id是wrapper,標籤為li的所有內容

href=movie.find('a')["href"]

獲取標籤為 a 裡邊的 href(對應的html裡的:<a href="https://movie.douban.com/subject/1292052/" class="">)

 name = movie.select('.hd > a > span')[0].text

獲取標籤為a 裡 標籤為span的內容,裡邊有三個span,name是對應的第一個,所以下標為0

更多關於beautifulsoup的使用可以檢視對應的官方文件