第一個爬蟲項目

image.png
- 周末花了點時間學(xué)習(xí)爬蟲,果然還是挺難的(To me。。),不得不說,其中還是有許多坑在里面,比如你要理解網(wǎng)頁里各個部分的構(gòu)成,找到你所需要的東西,然后用正則表達(dá)式將其匹配出來,一個經(jīng)典的笑話:
當(dāng)你有一個困難,你發(fā)現(xiàn)用正則表達(dá)式可以解決這個困難的時候,好了,這下你就會有兩個困難了..,正則表達(dá)式入門的確不難,但要掌握或者是熟練他的確需要很多腦筋,跟著教程學(xué)了一遍,做了第一個小項目,不大,主要是入門來練習(xí)下,后面本來想爬教務(wù)處里各個老師的信息的,結(jié)果竟然要VPN,我輸入之后從python里爬取好像還訪問不了,exm?不過也可能是我哪里寫錯了,下次再試試。 -
挺郁悶的,就這樣個小項目竟然花了整整兩天,本來還打算周末出去玩玩的,因為眼睛不知道怎么回事這一周都有點看不清,可能是對著屏幕看太多了,看來要注意點了,把眼睛整壞就不好了.
image.png
代碼
- 導(dǎo)入模塊,主要是要request模塊,貌似美麗湯(beautifulsoup)也挺厲害,有時間看看
import re
import urllib.request
import os
import ssl
- 訪問網(wǎng)頁
def open_url(url):
req = urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
response = urllib.request.urlopen(req,context=context)
html = response.read()
return html
- 抓取圖片連接,這里有點問題,應(yīng)該是我正則寫的不是很好,抓出來不知道為什么始終返回的兩端帶有雙引號,所以后面用循環(huán)去掉了兩端的引號,也算不夠簡潔吧。
def get_img(html):
p = r'src=("http[^"]+?\.[ipg|png]+")'
html = html.decode("GBK")
img_list = re.findall(p,html)
for num,value in enumerate(img_list):
img_list[num] = value[1:len(value)-1]
return (img_list)
- 保存抓取的圖片到本地,這次練習(xí)的不大,只有122張圖片,所以感覺還行,不知道跑大樣本數(shù)據(jù)電腦帶不帶的動
def save_img(folder,img_list):
for each in img_list:
filename = each.split("/")[-1]
with open(filename,"wb") as f:
img = open_url(each)
f.write(img)
- 創(chuàng)建一個文件夾來保存圖片
def document_lol(folder = "lolpic"):
os.mkdir(folder)
os.chdir(folder)
url = "http://lol.52pk.com/hero/"
img_list = get_img(open_url(url))
save_img(folder,img_list)
if __name__ == "__main__":
context = ssl._create_unverified_context()
document_lol()
最后貼一張爬完的結(jié)果

image.png
OK,不是很好的開頭,接下來可以試著多做幾個簡單的練習(xí)之后再去爬一些網(wǎng)站抓取有用的數(shù)據(jù)來分析,(爬一下拉鉤網(wǎng)上招聘信息,鏈家的房租信息等)不過可能反爬機(jī)制那部分又要折騰很久。不得不說,當(dāng)你每次高高興興以為自己code沒問題的時候去運行,結(jié)果莫名其妙跑出一些BUG真的很氣人啊,有時候氣的想砸桌子。。。

image.png
