python - 网络数据采集的例子,有关find函数等等的疑问
大家讲道理
大家讲道理 2017-04-18 09:53:50
0
2
471

来自 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[] 之类的写法是如何依据的?可以这样写的原理?

新人求教~~谢谢!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
左手右手慢动作

Shenjianshou クラウド クローラー (http://www.shenjianshou.cn) を使用することをお勧めします。クローラーは完全にクラウド上で作成および実行され、開発および実装が迅速に行われます。可能です。

わずか数行の JavaScript で、複雑なクローラーを実装し、アンチクローラー、JS レンダリング、データ公開、チャート分析、アンチリーチングなどの多くの機能を提供できます。これらはよく遭遇する問題です。クローラーの開発過程では、Archer がすべてを解決するのに役立ちます。

いいねを押す +0
大家讲道理

find 関数は HTML ドキュメントも返し、find 関数および find_all 関数に接続できます。
配列値を取得した後は、次のように値の要素として直接扱うことができます。 > リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート