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

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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • 3.1 遍历单个域名 目标:爬取Wikipedia Kevin Bacon网页的所有其他文章链接。 3.1.1 爬...
    查德笔记阅读 5,759评论 0 1
  • /*** 写入*/localStorage['name'] = '小明'
    智多牛阅读 129评论 0 0
  • “我只能说,爱情是最喜欢在孤独的暗夜里生长的花朵,越孤独越黑暗的夜里,它便越是开得绚烂迷人。因为在孤独的黑暗的深夜...
    夏漪阅读 131评论 0 0
  • 一缕垂杨柳,且听风啸。 湖波荡,树微黄,只道今日已秋凉。 恬坐碧波亭,且望山小。 欲如此,看夕阳,奈何来日有方长。
    天快亮了阅读 451评论 8 7