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...