實(shí)驗(yàn)?zāi)康模韩@取“http://blog.csdn.net/”網(wǎng)頁上的所有鏈接
思路
1)確定好要爬取的入口鏈接
2)根據(jù)需求構(gòu)建好鏈接要提取的正則表達(dá)式
3)模擬成瀏覽器并爬取對應(yīng)網(wǎng)頁
4)根據(jù)步驟2中的正則表達(dá)式提取出該網(wǎng)頁中包含的鏈接
5)過濾掉重復(fù)的鏈接
6)后續(xù)操作,比如屏幕上輸出這些鏈接
源代碼:
# -*- coding: utf-8 -*-
# __author__ = 'Carina'
import re # 導(dǎo)入正則表達(dá)式
import urllib.request
def getlink(csdnurl):
# 模擬成瀏覽器
headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0")
opener = urllib.request.build_opener() # 修改表頭信息
opener.addheaders = [headers]
# 將opener安裝為全局
urllib.request.install_opener(opener)
file = urllib.request.urlopen(csdnurl)
data = str(file.read())
# print(data)
# 根據(jù)需求構(gòu)建好鏈接表達(dá)式
pat = '(https?:// [^\s)";]+\.(\w|/)*)'
link = re.compile(pat).findall(data)
print(link)
# 去除重復(fù)數(shù)據(jù)
link = list(set(link))
return link
# 要爬取的網(wǎng)頁鏈接
csdnurl = "http://blog.csdn.net/"
# 獲取對應(yīng)網(wǎng)頁中包含的鏈接地址
linklist = getlink(csdnurl)
# 通過for 循環(huán)分別遍歷輸出獲取到的鏈接地址到屏幕上
for link in linklist:
print(link[0])
瀏覽器F12.png
正則表達(dá)式的構(gòu)造不一定是固定的,需要根據(jù)需求來調(diào)整,只有更好摆霉,沒有最好
針對代碼中的表達(dá)式 (https?:// [^\s)";]+.(\w|/)*) 做下簡單的解釋
確定鏈接的簡單版格式:http(s)://xxx.yyy
1、協(xié)議部分有些是 http淡溯,有些是 https赋荆,s? 表示s可有可無
2医窿、xxx 部分 不可以出現(xiàn)空格,雙引號(hào)躯肌,分號(hào)
3缭贡、yyy 部分可以是一些非特殊字符炉擅,也可以是”/“符號(hào)