python爬蟲爬取豆瓣top250電影影評

2021-08-11 17:06:55 字數 3692 閱讀 7964

from urllib.request import urlopen

from bs4 import beautifulsoup

import requests

from selenium import webdriver

import pymysql

import top250

import re

'''連線資料庫'''

conn=pymysql.connect(host='127.0.0.1',user=user_name,passwd=password,db='mysql',charset='utf8mb4')

cur=conn.cursor()

cur.execute("use movie")

definsertcomments

(c,vn,t,id):

isql = "insert into short_comments(m_id,comments,votenum,time) values(\"%s\",\"%s\",\"%s\",\"%s\")"

cur.execute(isql % (id,c,vn,t))

cur.connection.commit()

'''這個函式主要是將電影的名字加入資料庫中'''

definsertmovie

(name):

ssql="select m_id from movie_info where m_name=\"%s\""

cur.execute(ssql %(name))

cur.connection.commit()

result=cur.fetchone()

if result==none:

isql="insert into movie_info (m_name) value(\"%s\")"

cur.execute(isql%(name))

cur.connection.commit

cur.execute(ssql%(name))

result=cur.fetchone()

else:

pass

'''這個函式在乙個短評的頁面提取出該頁面的短評,並且放入到list中返回'''

defextractcomment

(bsobj):

clist=

comments=bsobj.find("div",).findall("div",)

for comment in comments:

c=comment.find("p").get_text()[:1000].replace("\"","\\\"")

c.encode("utf-8")

vn=comment.find("span",).get_text()

t=comment.find("span",).get_text().replace("\n","").replace(" ","")

#insertcomments(c,vn,t,id)

return clist

'''這個函式主要是找到給頁面next的url,引數pre是next url的字首,例如「而構造完成後的url則是像「因為url比較有規律所以爬取很簡單'''

defconstructurl

(pre,bsobj):

try:

div=bsobj.find("div",)

a=div.find("a").get("href")

next=bsobj.find("div",).find("a",).get("href")

fullurl=pre+next

return fullurl

except attributeerror as e:

print (e)

print("it seams that it's the last page..........................")

return

none

'''這個函式對乙個具體的url進行請求,這裡用到了**ip,其實不用也可以的'''

deffakerequest

(url,cookies,proxys):

headers=

req=requests.get(url,headers=headers,cookies=cookies,proxies=proxys)

bsobj=beautifulsoup(req.text)

return bsobj

'''前面說了,如果獲取到豆瓣分配給使用者的bid會降低自己ip被封的可能性,所以我採用了對某乙個電影第一次請求時候獲取一次cookie(也即bid),接著後面在請求時都帶著這個cookie'''

deffakecookies

(url):

headers =

req = requests.get(url, headers=headers)

return req.cookies.get_dict()

#我自己寫了乙個python檔案來獲取top250電影的名字和詳情介面url

tcs=top250.getmovieandcurl()

#這裡用到了**ip,其實不用也是一樣的

proxys=

for item in tcs:

mname=item[0]

curl=item[1]

try:

id = insertmovie(mname)

#第一次對電影請求時獲取乙個cookie,接下來請求都帶著這個cookie

cookies = fakecookies(curl)

bsobj = fakerequest(curl, cookies, proxys)

clist= extractcomment(bsobj)

for c in clist:

insertcomments(c[0],c[1],c[2],id)

#下面三句主要是想要構造出乙個短評頁面共有的url字首pre。

pattern=re.compile(r'.*\?')

pre=pattern.findall(curl)[0]

pre=pre[:len(pre)-1]

#pre類似下面這樣

# pre = ""

nexturl = constructurl(pre, bsobj)

count = 0

#這個是除錯用的

while nexturl != none:

print(nexturl)

count = count + 1

print("page: " + str(count))

bsobj = fakerequest(nexturl, cookies, proxys)

nexturl = constructurl(pre, bsobj)

clist =extractcomment(bsobj)

for c in clist:

insertcomments(c[0], c[1], c[2], id)

except exception as e:

print(e)

'''關閉資料庫連線'''

cur.close()

conn.close()

因為爬蟲笨笨的,所以獲取250部電影短評花了不少時間,自己又很開心它一點一點的獲取到紀錄,所以就在這個時間寫了這篇部落格,現在一共獲取了四萬條記錄了,開心~

Python爬取豆瓣Top250

from selenium import webdriver import requests import time import os url driver webdriver.chrome c chromedriver win32 chromedriver.exe driver.get url ...

簡易爬蟲 爬取豆瓣電影top250

此爬蟲簡單到不能再簡單了,主要內容就是爬取豆瓣top250電影頁面的內容,然後將該內容匯入了資料庫。下面先上結果圖 def getlist listurl,result time.sleep 2 res requests.get listurl,headers headers soup beauti...

爬蟲實戰 爬取豆瓣電影top250

1.爬蟲入門必備知識 爬取 2.爬蟲思路講解 a 了解翻頁url的變化規律 第一頁 第二頁 b 了解每一頁提取內容定位 每一頁包含25部電影 c 了解如何提取每部電影的詳細資訊 3.完整 usr bin env python coding utf 8 import requests from bs4...