我發現自己沒有整理和總結的習慣,有時是學了之後覺得會了,懶得整理,有時是沒有時間,偶爾有時候想起來會寫一篇。但是後來發現忘的還是挺快的,而且想找以前的東西的時候總是不太方便。不過人生在世,總要給這個世界留下點什麼。把自己在學習中得到的東西,所思所想都記錄下來,所以在此立個flag【狗頭】,養成總結和寫作的習慣=-=。
最近在看崔慶才老師的python3網路爬蟲開發實戰爬取貓眼top100的電影資訊。總的來說,爬取的步驟分為兩步,1)使用requests模組的get方法請求網頁資訊;2)使用正規表示式將資訊匹配出來。步驟不麻煩,但是由於時間原因,http協議改為了https協議,不過也可能當時用的就是https協議,不過http請求會跳轉為https請求,不過這個影響不大。另乙個是如果像文中那樣設定headers欄位的話會被貓眼的伺服器識別為爬蟲,得到的是乙個美團驗證中心的頁面。
1)請求頁面
文中的headers只設定了乙個user-agent欄位,但是會被識別為爬蟲,所以最好將該請求的所有header欄位都設定,這樣貓眼也就無法識別爬蟲和瀏覽器了。cookie欄位不用設定,因為第一次請求是沒有cookie的。
正則提取最重要的就是正規表示式。
.*?
"(.*?)" title=
"(.*?)".*?
"star"
>
(.*?)
.*?"releasetime"
>
(.*?)
.*?
這是我一開始寫的正則式,還是很稚嫩,感覺太具體了,多了很多不必要的資訊,我提取的資訊和文中提取的資訊不同,只提取了href 、電影名、主演、上映時間。
.*?board-index.*?>
(.*?)
.*?data-src=
"(.*?)".*?name.*?a.*?>
(.*?)
這是文中的乙個正規表示式,我從中理解的正規表示式的書寫原則是先找要匹配資訊前面最近的錨點,然後再從錨點匹配到所要的資訊。
.*?href=
"(.*?)" title=
"(.*?)".*?star.*?>
(.*?)
<.>
(.*?)
<.>
這是根據文中的方法書寫的正規表示式
**部分
import requests, re
main_url =
''films=
defgetonepage
(url)
: headers =
respond = requests.get(url, headers=headers)
pattern =
'.*?href="(.*?)" title="(.*?)".*?star.*?>(.*?)<.>(.*?)<.>
result = re.findall(pattern, respond.text, re.s)
print
(result)
films.extend(result)
defmain()
: all_url=
for i in
range(10
,100,10
):tmp = main_url+
'/?offset='
+str
(i)for u in all_url:
getonepage(u)
# print(films[20])
with
open
('maoyan.txt'
,'w'
)as f:
line =
''for i in
range
(100):
# print(films[i])
line_list=
list
(films[i]
) line_list[2]
= line_list[2]
.strip(
) line =
' '
.join(line_list)
+'\n'
f.write(line)
main(
)
《Python3網路爬蟲開發實戰》爬蟲有關庫的安裝
pip install requests pip install selenium 將chromedriver.exe檔案放到python的scripts目錄下 將其路徑配置到環境變數 將geckodriver.exe檔案放到python的scripts目錄下 將其路徑配置到環境變數 解壓後將bin...
Python3網路爬蟲開發實戰 分布式爬蟲原理
分布式爬蟲原理 我們在前面已經實現了 scrapy 微博爬蟲,雖然爬蟲是非同步加多執行緒的,但是我們只能在一台主機上執行,所以爬取效率還是有限的,分布式爬蟲則是將多台主機組合起來,共同完成乙個爬取任務,這將大大提高爬取的效率。分布式爬蟲架構 在了解分布式爬蟲架構之前,首先回顧一下 scrapy 的架...
Python 3 網路爬蟲
python 原來還可以這樣玩 python爬蟲,破解有道翻譯介面引數 破解有道翻譯反爬蟲機制 python3網路爬蟲快速入門實戰解析 article details 78123502 python3網路爬蟲 五 python3安裝scrapy article details 60156205 py...