這是我第一次在這寫部落格,還是有點興奮。
我也是剛接觸python不久,發現python**真的很強大,簡單就可以處理複雜的事。最近很想寫個爬蟲,但水平沒達到,正好csdn學院有個公開課,黃勇老師講的《90分鐘掌握python多執行緒爬蟲(全程實戰)》,3月6日晚20:00我聽了直播,當時沒跟上,等看了回播才搞明白(可能我是python2課裡是python3,找理由
o(∩_∩)o哈哈~)。
先上筆記:
爬蟲的流程分析:
1、請求資料:requests庫(這個庫可以很方便的去請求網路資料)在此感謝黃勇老師,也不囉嗦了,直接上**。*安裝方法:pip install requests
2、將請求下來的資料解析出來,獲取我們想要的資料,把不想要的資料拋棄掉
*beautifulsoup:pip install bs4
*lxml:pip install lxml
4、無論你的爬蟲是大還是小,都是由這幾個模組組成的。
#coding:utf-8
import
requests
import
osfrom bs4 import
beautifulsoup
import
urllib
import
threading
#首先要進行身份偽裝
headers =
page_urls=
img_urls=
#glock=threading.lock()
defproducer():
''''''
while
true:
glock.acquire()
#多執行緒對全域性變數操作必須加鎖
if len(page_urls)==0:
glock.release()
#跳出迴圈退出程式前也必須解鎖
break
page_url=page_urls.pop()#
pop函式將列表中最後一項刪除,並返回刪除的項
glock.release()#
操作完成記得解鎖
response = requests.get(page_url, headers)#
獲取網頁資料,返回response
text =response.text
#print text
soup = beautifulsoup(text, '
lxml
')#例項beautifulsoup物件解析資料,使用lxml引擎。當然還可以用其他解析工具,也可用正規表示式,正規表示式比較複雜
img_list = soup.find_all("
img", attrs=)#
根據標籤屬性查詢自己想要的資料,拋棄其它非表情包
for img in
img_list:
img_url = img['
data-original
']#glock.acquire()
glock.release()
defconsumer():
''''''
while
true:
glock.acquire()
if len(img_urls)==0 and len(page_urls)==0:#
剛執行有可能img_urls為空,所以加上page_urls同時為空才是結束條件
glock.release()
break
if len(img_urls)>0:
img_url=img_urls.pop()#
為空時pop出錯
else
: img_url=''
glock.release()
ifimg_url:
filename = img_url.split("
/")[-1]#
將位址分割成列表,取最後一項檔名
fullpath = os.path.join("
images
", filename)#
將images目錄名與檔名合併,由於系統不同,不一定就是加"/"
try:
urllib.urlretrieve(img_url, fullpath)##
except
exception as e:
e
print img_url,""#
還時常出現10054錯誤,可能是伺服器發現了爬蟲強行關閉當前鏈結
defmain():
for x in range(1,100):#
爬取1-99頁資料
page_url="
"+str(x)
for x in range(5):#
開啟5個生產者執行緒
th=threading.thread(target=producer)
th.start()
for x in range(5):#
開啟5個消費者執行緒
th =threading.thread(target=consumer)
th.start()
if__name__ == '
__main__
':#如果作為程式則執行,如果作為包載入則不執行
main()
表情包的爬取
import requests from bs4 import beautifulsoup from urllib.request import urlretrieve import os base page url page url list for x in range 1 50 url bas...
python爬蟲 表情包爬取
問題 1.路徑問題以及獲取路徑問題 注 argv 0 只是得到的是當前指令碼的絕對位置 而os模組中的幾種獲得路徑的方法,得到的是當前的工作目錄,如 open 1.txt r 則會在當前工作目錄查詢該檔案。即大部分的檔案操作都是相對於當前工作路徑。若要改變當前工作路徑,可以用 os.chdir pa...
爬蟲 學習爬取表情包
表情包位址 表情位址 1.請求目標 2.匹配不同位址 url def get urls url 1.請求目標 response requests.get url 2.通過正則來匹配不同位址 url 每張共有內容保留,不同的內容用.來匹配 表示匹配任意數量不換行的字元 表示盡可能匹配最短的字元 r u...