爬蟲提前準備包
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 部分內容閃了一下,那麼說明網頁是通過非同...