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

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 urlopen
from bs4 import BeautifulSoup
import re
pages=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 里面。

猜你喜欢

转载自blog.csdn.net/choven_meng/article/details/78173665