把電影天堂資料存入mysql資料庫 - 增量爬取
思路
1、mysql中新建表 request_finger,儲存所有爬取過的鏈結的指紋
2、在爬取之前,先判斷該指紋是否爬取過,如果爬取過,則不再繼續爬取
這裡寫的原生sql語句:
# 建庫建表
create
database filmskydb charset utf8;
use filmskydb;
create
table request_finger(
finger char(32
))charset
=utf8;
create
table filmtab(
name varchar
(200),
download varchar
(500))
charset
=utf8;
import requests
import time
import random
import pymysql
from hashlib import md5
import re
class
filmsky
(object):
def__init__
(self)
: self.url=
""self.db=pymysql.connect(
"localhost"
,'root'
,'0123'
,'filmskydb'
,charset=
'utf8'
) self.cursor=self.db.cursor(
)def
get_html
(self,url)
:#請求頁面
headers=
response=requests.get(url,headers=headers)
html=response.content.decode(
'gb2312'
,'ignore'
)return html
defre_func
(self,re_bds,html)
:#正則解析函式
pattern=re.
compile
(re_bds,re.s)
r_list=pattern.findall(html)
return r_list
defmd5_string
(self,string)
:#生成md5指紋函式
s=md5(
) s.update(string.encode())
md5_string=s.hexdigest(
)return md5_string
#解析一級頁面--詳情頁鏈結
defparse_html
(self,one_url)
: one_html=self.get_html(one_url)
re_bds =
'.*?'
one_list=self.re_func(re_bds,one_html)
for href in one_list:
two_url=
''+href
#如果is_go_on(two_url)函式返回true,代表該頁面沒有被抓去過
if self.is_go_on(two_url)
:#獲取當前電影的所有資料,然後在遍歷下乙個
self.get_film_info(two_url)
#抓取完乙個電影資訊把指紋存到資料表中
finger=self.md5_string(two_url)
ins=
'insert into request_finger values (%s)'
self.cursor.execute(ins,
[finger]
) self.db.commit(
)#隨機休眠
time.sleep(random.randint(1,
2))#判斷two_url是否被抓去過
defis_go_on
(self,two_url)
:#先進行md5加密--request_finger表中儲存指紋
md5_two_url=self.md5_string(two_url)
#資料表中判斷
sel=
'select finger from request_finger where finger=%s'
#execute()方法返回受影響的條數,未查找到的話返回0
result=self.cursor.execute(sel,
[md5_two_url]
)#result如果為0表示沒有抓取過。返回true
ifnot result:
return
true
# 解析二級頁面: 電影詳情頁函式
defget_film_info
(self, two_url)
: item =
two_html = self.get_html(two_url)
re_bds =
'.*?.*?>(.*?)'
# film_list: [('x戰警','')]
film_list = self.re_func(re_bds, two_html)
item[
'name'
]= film_list[0]
[0].strip(
) item[
'download'
]= film_list[0]
[1].strip(
)print
(item)
ins =
'insert into filmtab values(%s,%s)'
l =[item[
'name'
], item[
'download']]
self.cursor.execute(ins, l)
self.db.commit(
)# 入口函式
defrun
(self)
:for page in
range(1
,201):
url = self.url.
format
(page)
self.parse_html(url)
# 斷開資料庫
self.cursor.close(
) self.db.close(
)if __name__ ==
'__main__'
: spider = filmsky(
) spider.run(
)
0125c 電影天堂爬蟲
from lxml import etree import requests base domin url html gndy dyzz list 23 1.html headers def get detail urls url response requests.get url,headers ...
電影天堂爬蟲
import requests from lxml import etree imgs zoom.xpath img src 標籤分開時,注意勿忘 獲取封面圖和縮圖 cover img imgs 0 screenshot imgs 1 movie cover cover img movie scre...
電影天堂二級頁面抓取案例
位址 電影天堂 2019年新片精品 更多 目標 分析 一級頁面需抓取 1 電影詳情頁鏈結 二級頁面需抓取 1 電影名稱第1頁 https 第2頁 https 第n頁 https 1 一級頁面正規表示式 100 5 ulink table 2 二級頁面正規表示式 title all 07519a fr...