python作為最易上手的程式語言之一,在很多領域的應用已經相對成熟,尤其是一些工具應用類的場景,比如本文要介紹的網路爬蟲。網路爬蟲目前比較成熟的方法有三種,在python中都有現有打包好的包/庫,直接呼叫,非常方便。本篇部落格只關注網路爬蟲的應用層面,重點放在如何解決實際問題,所以對三種方法的理論介紹不做過多描述。
python中的乙個html/xml的解析庫,可以很方便地從網頁中提取資料,自動將輸入文件換成unicode編碼,輸出文件轉化成utf-8編碼。導包python中一款高效能 html/xml 解析器,利用xpath可以快速定位特定元素,獲取節點資訊。轉化本地檔案from bs4 import beautifulsoup
轉化網路檔案*** = beautifulsoup(
open
('本地檔案'),
'lxml'
)
列印***物件顯示出來的就是html檔案中的內容*** = beautifulsoup(
'字串型別或者位元組型別'
,'lxml'
)
導包xpath萬用字元解析語法方式1from lxml import etree
解析語法方式2*** = etree.html(
'index.html'
)
*** = etree.parse(
'index.html'
)
萬用字元描述
*匹配任何元素節點
@*匹配任何屬性節點
node()
匹配任何型別的節點
也是python中乙個常用的 html/xml 解析器,可以跟xpath聯合使用。
相關介紹參見xpath與lxml庫介紹及爬蟲案例。
該例中用的是beautifulsoup方法。使用其他方法結構都是類似的,只是解析方法不同,可以自行修改。
# 已知豆瓣id時,爬取影片基本資訊
# 把已知的豆瓣id存到專案檔案中的'dubanids.xlsx'檔案中即可,程式執行時自動匯入該檔案
import random
import numpy as np
from bs4 import beautifulsoup #解析包
import requests #請求包
import pandas as pd
import json
import time # 可用於設定休眠時間,控制爬蟲頻率
from threading import thread
user_agents =[,
,'mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; trident/5.0'
,'mozilla/5.0 (macintosh; intel mac os x 10.6; rv:2.0.1) gecko/20100101 firefox/4.0.1'
,'opera/9.80 (macintosh; intel mac os x 10.6.8; u; en) presto/2.8.131 version/11.11'
,'opera/9.80 (windows nt 6.1; u; en) presto/2.8.131 version/11.11',,
]doubanids_dataframe = pd.read_excel(
'doubanids.xlsx'
)# 把目標影片的豆瓣id存到這個檔案中
doubanid_array = np.array(doubanids_dataframe)
doubanid_list = doubanid_array.tolist(
)print
(doubanid_list)
doubanids=
for i in
range(0
,len
(doubanid_list)):
doubanid = doubanid_list[i]
id = doubanid[0]
print
(doubanids)
# 根據豆瓣id列表構建出乙個url列表
urls =
for doubanid in doubanids:
url =
''+str
(doubanid)
print
(urls)
allinfo=
# 定義乙個函式,用來爬取乙個電影的資訊,並把資訊寫入指定excel
defgetinfo
(url)
: wdata = requests.get(url, headers=
) wsoup = beautifulsoup(wdata.text,
'lxml'
) names = wsoup.select(
'#content > h1 > span:nth-child(1)'
) info_all = wsoup.select(
'#info'
) data_one = info_all[0]
.get_text(
)if info_all else
"" data_two = data_one.split(
'\n'
) directors = data_two[1]
.strip(
'導演: ')if
len(data_two)
>
1else
"" actors = data_two[3]
.strip(
'主演: ')if
len(data_two)
>
3else
"" types = data_two[4]
.strip(
'型別: ')if
len(data_two)
>
4else
"" regions = data_two[5]
.strip(
'製片國家/地區: ')if
len(data_two)
>
5else
"" reltimes = data_two[7]
.strip(
'上映日期: ')if
len(data_two)
>
7else
"" secnames = data_two[9]
.strip(
'又名: ')if
len(data_two)
>
9else
"" doubanscores = wsoup.select(
'#interest_sectl > div.rating_wrap.clearbox > div.rating_self.clearfix > strong'
) sconumbers = wsoup.select(
'#interest_sectl > div.rating_wrap.clearbox > div.rating_self.clearfix > div > div.rating_sum > a > span'
) introductions = wsoup.select(
'#link-report > span'
) info =
df = pd.dataframe(allinfo)
df.to_excel(
'douban_idtest.xlsx'
, sheet_name=
'sheet1'
)# 上面一行中有爬取下來的影片資訊存入的excel的名稱,可任意修改,檔案路徑是專案檔案下
# 注:若專案檔案中已有該名稱的excel檔案,會自動覆蓋,若不想被覆蓋,需更改檔名或另存原檔案
# 迴圈遍歷url列表
for single_url in urls:
print
(single_url)
getinfo(single_url)
seconds = random.uniform(3,
4) time.sleep(seconds)
# 設定休眠時間3-4秒
針對於一些基本的爬蟲場景,一般僅關注一種方法即可,換句話說,熟練掌握其中的一種方法,一般就可以解決大多數的爬蟲場景,但不同的爬蟲場景、不同的頁面結構,使用不同的方法在效能、速度等方面上會有不同,也會出現某種方法不合適的情況。網路爬蟲雖然只是個應用工具,多數情況下解決當下問題即可,但是其中也會遇到很多細節問題,如果有時間可以先進行系統學習,再開始場景應用。 python爬蟲 豆瓣電影
最近學習python 順便寫下爬蟲練手 爬的是豆瓣電影排行榜 python版本2.7.6 安裝 beautiful soup sudo apt get install python bs4 安裝 requests sudo apt get install python requests下面是py a...
python爬蟲之獲取豆瓣電影資訊
本質就是 發起請求 獲取響應內容 解析內容 儲存資料首先,需要做的就是匯入模組pip install requests pip install lxml coding utf 8 import requests from lxml import etree 選取網頁並做解析 這裡以 titanic ...
go爬蟲之爬取豆瓣電影
好久沒使用go語言做個專案了,上午閒來無事花了點時間使用golang來爬取豆瓣top電影,這裡我沒有用colly框架而是自己設計簡單流程。mark一下 思路定義兩個channel,乙個channel存放web網頁源內容,另乙個存放提取後的有效內容。多個goroutine併發爬取網頁源內容放到存放we...