来自 Python网络数据采集的例子:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
random.seed(datetime.datetime.now())
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find("p", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
links = getLinks("/wiki/Kevin_Bacon")
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
print(newArticle)
links = getLinks(newArticle)
问题一: return bsObj.find("p", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
这段代码里面, find函数后面为什么可以加findAll,即写成 XXX.find().findAall() 的形式?
问题二:newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
此段代码 像 links[].attrs[] 之类的写法是如何依据的?可以这样写的原理?
新人求教~~谢谢!
Perangkak Awan Shenjianshou disyorkan (http://www.shenjianshou.cn) ditulis sepenuhnya dan dilaksanakan pada awan Tidak perlu mengkonfigurasi sebarang persekitaran pembangunan dan pembangunan serta pelaksanaan yang pantas adalah mungkin.
Dengan hanya beberapa baris javascript, anda boleh melaksanakan perangkak yang kompleks dan menyediakan banyak fungsi berfungsi: anti-anti-crawler, rendering js, penerbitan data, analisis carta, anti-leeching, dll. Ini adalah masalah yang sering dihadapi dalam proses membangunkan perangkak. The Archer akan membantu anda menyelesaikan semuanya.
Fungsi find juga mengembalikan dokumen HTML dan boleh disambungkan ke fungsi find dan find_all
Selepas nilai tatasusunan diperoleh, ia boleh dianggap secara langsung sebagai elemen nilai, contohnya: