Python爬蟲實戰 2345影視獲取經典電影資訊

2021-10-08 03:46:10 字數 4432 閱讀 6761

爬蟲提前準備包

1)安裝解析庫lxml

lxml是python的乙個解析庫,支援html和xml的解析,支援xpath解析方式,而且解析效率非常高。

命令列進行安裝:pip install lxml

2)requests庫,安裝:pip install requests

獲取資訊user-agent

user agent中文名為使用者**,簡稱 ua,它是乙個特殊字串頭,使得伺服器能夠識別客戶使用的作業系統及版本、cpu 型別、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器外掛程式等。

使用user-agent可以將爬蟲模擬成使用者操作計算機,防止爬蟲被封。而短時間進行大量訪問也有可能被封掉,而自動生成ua可以有效解決這個問題。

進入2345影視:控制台開啟獲取user-agent

爬取2345影視經典電影資訊,**塊如下

#coding:utf-8

import requests

from lxml import etree

from urllib.parse import urljoin #url拼接

from getcsv import getcsv

defget_html

(url)

:'''

獲取源**

:param url:

:return:

'''headers=

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

#response是2開頭,即返回response,否則返回none

return response.text if

str(response.status_code)

.startswith(

"2")

else

none

defget_detail_url_list

(url)

:'''

獲取電影詳情頁url

:param url:

:return:

'''#獲取頁面

html=get_html(url)

#如果沒有獲取頁面,返回為空

ifnot html:

print

("response狀態碼不是200"

)return

#解析獲取的頁面

parser=etree.html(get_html(url)

)#獲取詳情頁面的url

detail_urls=

[urljoin(url,i)

for i in parser.xpath(

"//ul[contains(@class,'v_pictxt')]/li/div[@class='pic']/a/@href")]

#翻頁去最後一頁

next_page_tag=parser.xpath(

"//div[@class='v_page']/a[last()]"

)#到最後一頁,獲取最後一頁

if next_page_tag:

next_page_tag=next_page_tag[0]

next_page_url=urljoin(url,next_page_tag.attrib.get(

"href"))

ifin next_page_tag.text else

none

return next_page_url,detail_urls

defparse_detail

(url)

:'''

解析詳情頁的url

xpath定位是從1開始的

:param url:

:return:

'''html = get_html(url)

ifnot html:

print

("response狀態碼不是200"

)return

#獲取資訊路徑

etree=etree.html(html)

title =

"".join(etree.xpath(

"//div[@class='tit']/h1/text()"))

# print(type(title))

score = etree.xpath(

"//div[@class='tit']/p/em/text()")[

0].replace(

"分","")

actor =

" ".join(etree.xpath(

"//ul[contains(@class,'txtlist')]/li[contains(@class,'liactor')]/a/text()"))

director =

"".join(etree.xpath(

"//ul[contains(@class,'txtlist')]/li[@class='li_3']/a/text()"))

introduction =

"".join(etree.xpath(

"//ul[contains(@class,'newintro')]/li/p/span/text()"))

# 多個list合併成乙個list

list

=[title,actor,director,introduction]

#乙個大的list每4個分割成1個list

lists=list_split(

list,4

)# print(title)

return lists

#切割列表

deflist_split

(items, n)

:return

[items[i:i+n]

for i in

range(0

,len

(items)

, n)

]def

spider()

: next_url =

""datas=

while next_url:

next_url, urls = get_detail_url_list(next_url)

# print(urls)

# print(type(urls))

for url in urls:

# print(url)

#新增資料在陣列datas

datas.extend(parse_detail(url)

)# return parse_detail(url)

return datas

if __name__ ==

'__main__'

:import time

datas1=spider(

) path =

'data.csv'

title =

['電影名'

,'演員'

,'導演'

,'簡介'

] w_data = getcsv(

).write_csv(path, title, datas1)

getcsv.py **塊如下:

#coding:utf-8

import csv

import os

#利用pandas包來按照列寫入csv檔案

import pandas as pd

class

getcsv

:def

write_csv

(self,file_path,title,datas)

:with

open

(file_path,

'a', encoding=

'utf-8'

, newline='')

as f:

# rows=f.readlines()

# for row in rows:

try:

csv_write = csv.writer(f, dialect=

'excel'

)# 寫入列名

csv_write.writerow(title)

# 寫入多行

csv_write.writerows(datas)

except filenotfounderror as e:

print

('指定的檔案無法開啟'

)except ioerror as e:

print

(e)print

("檔案寫入錯誤"

)

學習資料:

python爬蟲實戰

python python基礎 python快速教程 python學習路線圖 python大資料學習之路 python爬蟲實戰 python pandas技巧系 量化小講堂 python機器學習入門資料梳理 學習群 大資料 python資料探勘2 323876621 r r語言知識體系 怎樣學習r ...

Python爬蟲實戰(二)

實驗介紹 本實驗通過使用beautifulsoup方法對網頁進行簡單的爬取工作,並對beatifulsoup方法進行簡單的介紹。beautifulsoup開發手冊 示例網頁如下 實驗內容 從本地網頁爬取商品資訊,商品名,評分等級等相關資訊 實驗 from bs4 import beautifulso...

Python爬蟲實戰2 0

這次實戰的內容是非同步載入 非同步載入和普通的數字下表迭代的url不同的地方在於不能直接通過乙個for迴圈來獲取每乙個頁面的內容。如何判別翻頁是否是非同步載入的呢?開啟瀏覽器檢查,然後定位到頁面內容的那部分html 然後在瀏覽器按下翻頁按鈕,如果發現html 部分內容閃了一下,那麼說明網頁是通過非同...