您的位置:首页 > 理论基础 > 计算机网络

python网络数据采集实例-在一个网站上随机地从一个链接跳到另一个链接&采集整个网站

2017-10-08 10:54 761 查看
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
#用系统当前时间生成一个随机数生成器,保证在每次程序运行的时候,维基百科词条的选择都是一个全新的随机路径。
random.seed(datetime.datetime.now())
#定义函数,返回词条a链接
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html,"html.parser")
return bsObj.find("div", {"id":"bodyContent"}).findAll("a",
href=re.compile("^(/wiki/)((?!:).)*$"))
links = getLinks("/wiki/Kevin_Bacon")
'''用一个循环,从页面中随机找一个词条链接标签并抽href 属性,打印这个页面链接,再把这个链接传入getLinks 函数,
    重新获取新的链接列表。'''
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
print(newArticle)
links = getLinks(newArticle)
采集整个网站:
收集页面标题、正文的第一个段落,以及编辑页面的链接这些信息。
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages=set()def getLinks(pageUrl):#定义全局变量global pageshtml=urlopen("https://en.wikipedia.org"+pageUrl)bsObj=BeautifulSoup(html,"html.parser")try:print(bsObj.h1.get_text())print(bsObj.find(id="mw-content-text").findAll("p")[0])print(bsObj.find(id="ca-edit").finf("span").find("a").attrs["href"])except AttributeError:print("页面缺少一些属性")for link in bsObj.findAll("a",href=re.compile("^(/wiki/)")):# 遇到新的界面newPage=link.attrs['href']print("------------\n"+newPage)pages.add(newPage)getLinks(newPage)getLinks("")
1、所有的标题(所有页面上,不论是词条页面、编辑历史页面还是其他页面)都是在h1 → span 标签里,而且页面上只有一个h1 标签。
2、所有的正文文字都在div#bodyContent 标签里。获取第一段文字,用div#mw-content-text → p 更好(只选择第一段的标签)。
3、编辑链接只出现在词条页面上。如果有编辑链接,都位于li#ca-edit 标签的li#caedit→ span → a 里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐