网络数据采集过程中你应该考虑的两个问题:
- 该数据采集器需要消耗的网络流量(越少越好);
- 该数据采集器对目标网站服务器的负载(越低越好);
采集网站数据的思路:
- 需要通过输入关键字符构建一个初始的网站URL链接;
- 通过解析网页遍历所有的链接,使用正则表达式筛选自己需要的链接;
- 在返回的链接中随机选择一个链接,再次循环;
需要注意: - 正则表达式构建目标链接需要嵌在BeautifulSoup中的find或findall使用;
- 使用random模块生成随机数时,为了保证随机数种子的不同,建议使用计算机中当时的时间。如”random.seed(datetime.datetime.now()) “
以下是在维基百科中输入china后返回的链接
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/china")
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
print(newArticle)
links = getLinks(newArticle)