来自 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[] 之类的写法是如何依据的?可以这样写的原理?
新人求教~~谢谢!
Shenjianshou Cloud Crawler(http://www.shenjianshou.cn)를 사용하는 것이 좋습니다. 크롤러는 클라우드에서 완전히 작성되고 실행되며, 개발 환경을 구성할 필요가 없으며 신속한 개발 및 구현이 가능합니다. 가능합니다.
단 몇 줄의 자바스크립트만으로 복잡한 크롤러를 구현하고 크롤러 방지, js 렌더링, 데이터 게시, 차트 분석, 리치 방지 등 다양한 기능을 제공할 수 있습니다. 이러한 문제는 자주 발생하는 문제입니다. 크롤러를 개발하는 과정에서 Archer가 이 모든 것을 해결하는 데 도움이 될 것입니다.
찾기 함수는 HTML 문서도 반환하며 find 함수 및 find_all 함수에 연결할 수 있습니다.
으아악배열 값을 얻은 후에는 값의 요소로 직접 처리할 수 있습니다. 예: