python爬蟲學習第三十九天

2021-08-07 17:34:18 字數 2034 閱讀 7197

今天完成昨天說的,採集網頁並驗證,這個程式有一定難度

練習 驗證wikipedia鏈結名稱的最後一項與頁面標題是否相符

import unittest

from bs4 import beautifulsoup

from urllib.request import urlopen

import datetime

import random

random.seed(datetime.datetime.now())

class

webtest

(unittest.testcase):

bsobj = none

url = none

deftest_content

(self):

global bsobj

global url

url = ""

for i in range(1,100):

bsobj = beautifulsoup(urlopen(url))

titles = self.titlematchesurl()

self.assertequals(titles[0],titles[1])

self.asserttrue(self.contentexist())

url = self.randomurl()

print("finished!")

pass

defsetup

(self):

print("test begin!")

pass

deftitlematchesurl

(self):

global bsobj

global url

title = bsobj.find("h1").get_text()

urltitle = url[(url.index('/wiki/')+6):]

urltitle = urltitle.replace("_"," ")

# urltitle = unquote(urltitle)

return [title.lower(),urltitle.lower()]

pass

defcontentexist

(self):

global bsobj

global url

content = bsobj.find("div",)

if content is

notnone:

return

true

return

false

pass

defrandomurl

(self):

global url

global bsobj

urllist = bsobj.findall("a",)

url = urllist[random.randint(0,len(urllist)-1)]

return

""+url.attrs["href"]

pass

if __name__ == '__main__':

unittest.main()

這個程式寫下來,總體上沒有什麼問題,工作量中等但是思路總的來說還是很簡單的。我在寫的過程中比較難的地方竟然是處理字串,這叫我有些沒想到。

說一下總體的結構

整個測試模組包含在webtest類中,裡面有五個函式

test_content,測試的主體,整個類裡面只有這乙個測試,其他函式都是為它做支撐,作用是比較標題與url中相應的內容是否相符

setup,起始函式

titlematchesurl,處理網頁中實際的標題與url中的標題名,用陣列做返回一次性返回兩者

contentexist,檢測百科詞條內容是否存在,在test_content作為乙個引數

randomurl,取回隨機的下乙個url

今天先到這裡啦,開學了事情開始多起來了,打卡~

學習python 第三十九天

python 好的 防止python指令碼中被重複執行 ifname main if x 判斷真 if not x 判斷假 if x in items 包含 for x in items 迭代 不使用臨時變數交換兩個值 a,b b,a 用序列構建字串。sr a a c c b b ss join s...

株洲所實習的第三十九天(周記 八)

今天是2020年1月6日星期一,記錄一下上週發生的事情。上週買了一本西班牙語的書,開始自學西班牙語。學了第一天之後,我發現西語有乙個特點,是這個單詞怎麼拼寫,基本上就怎麼發音。西語的母音無論出現在哪個位置,都是發原本的音。espa a是西語的西班牙的意思。我覺得挺有趣的,不過有一點讓我不太適應的是,...

第三十九周學習筆記

原文 rich feature hierarchies for accurate object detection and semantic segmentation目標檢測發展停滯,通過複雜的ensemble模型才能勉強提高一些精度 兩個 insights 三個模組 一些名詞 為什麼不直接使用fi...