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

来源:互联网 发布:简单bbs论坛源码php 编辑:程序博客网 时间:2024/06/06 23:50
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport datetimeimport randomimport 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 pages    html=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 里面。
原创粉丝点击