python - 网络数据采集的例子,有关find函数等等的疑问

查看:78
本文介绍了python - 网络数据采集的例子,有关find函数等等的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

新人求教~~谢谢!

解决方案

find函数返回的也是html文档,可以接find函数和find_all函数;
数组取值后可以直接当作值的元素对待,例如:

a = ['ab',1,[1,2]]
a[0].upper() # 'AB'
a[2].append(1) # a == ['ab',1,[1,2,1]]

这篇关于python - 网络数据采集的例子,有关find函数等等的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆