来自 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[] 之类的写法是如何依据的?可以这样写的原理?
新人求教~~谢谢!
Il est recommandé d'utiliser le Shenjianshou Cloud Crawler (http://www.shenjianshou.cn). Le robot est entièrement écrit et exécuté sur le cloud. Il n'est pas nécessaire de configurer un environnement de développement, et un développement et une mise en œuvre rapides. sont possibles.
Avec seulement quelques lignes de javascript, vous pouvez implémenter des robots complexes et fournir de nombreuses fonctions fonctionnelles : anti-anti-crawlers, rendu js, publication de données, analyse de graphiques, anti-sangsue, etc. Ce sont des problèmes souvent rencontrés en train de développer des robots d'exploration. L'Archer vous aidera à tout résoudre.
La fonction find renvoie également un document HTML et peut être connectée aux fonctions find et find_all
Une fois la valeur du tableau obtenue, elle peut être traitée directement comme un élément de la valeur, par exemple :