python 网络爬虫第三章-爬取维基百科(2)

2018-02-21  本文已影响40人  查德笔记

3.1.2 随机打开网页中的文章链接

目标:随机漫步从一个网页随机跳转到该网页中的链接,如此循环。
示例代码如下:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re


random.seed(datetime.datetime.now()) #seed 不同,random的结果就会不同。反之每次seed值相同,random的结果就会相同。
#因此用当前时间保证每次运行的random结果都不相同。


def get_links(article_url):
    html = urlopen("http://en.wikipedia.org" + article_url)
    soup = BeautifulSoup(html, 'lxml')
    regex = re.compile(r"^(/wiki/)((?!:).)*$")
    return soup.find('div', {'id': 'bodyContent'}).find_all('a', href=regex)


links = get_links("/wiki/Kevin_Bacon")
sum = 0

while len(links) > 0:
    new_article = links[random.randint(0, len(links) - 1)].attrs['href']#随机选取一个文章链接
    print(new_article)#打印该链接的地址
    links = get_links(new_article)#获取该随机网页下所有的文章链接,循环进行。
    sum += 1

print(sum)

每次运行的结果都是随机的,因此每个人的运行结果也是不一样的。由于代码没有异常处理以及处理反爬虫机智,因此可以肯定一定会报错。

....
urllib.error.URLError: <urlopen error [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>
[Finished in 501.6s]
上一篇下一篇

猜你喜欢

热点阅读