python3爬蟲豆瓣top250電影(並儲存到mysql資料庫)
阿新 • • 發佈:2019-01-23
所用到的模組(需要提前安裝好):
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的使用可以檢視對應的官方文件