• 导入需要的模块
  • 需要安装BeautifulSoup

from urllib.request import urlopen, HTTPError, URLError
from bs4 import BeautifulSoup
import re
  • 要抓取的内容里面的链接如图

  • 打开网页审查查看标签如图:

  • 可以看出内容属于标签dd 以及 dd的属性是 class="desc"则:

  • 如果有异常则打印HTTPError, URLError异常内容

    • 首先查找标签bsObj.find('dd', {'class':'desc'})
    • 再查找dd标签下的子标签a,标签a的属性href用正则表达式匹配筛选,因为其下面的链接是以view或者subview开头的
    • 判断如果href属性在标签a中则打印链接.最后完成打印.

try:
html = urlopen('http://baike.baidu.com/link?url=FfHqPzChV9Iz7Kz0d2Mke-1njFShGt8fsFJ5mmyh-t48rnjLMbQNyeBFfmUz3oOCVvRSt0GHJ-nXDqbq9bgrZldbYDPUiQBNckuTBiGt-2Uss1aIWbhj7ELhOfrF3XoFeK2I0mSJ1ERslKeS0wUXtK')
except (HTTPError, URLError) as e:
print(e)
bsObj = BeautifulSoup(html, 'lxml')
for link in bsObj.find('dd', {'class':'desc'}).find_all('a', href=re.compile('^((/view/)*(/subview/)*)((?!:).)*$')):
if 'href' in link.attrs:
print(link.attrs['href'])
else:
print('not in it')
  • 打印内容如下:

  • 高级一点定义一个方法,只需要传入参数url即可

  • 这次打印时为每个抓取的链接添加上以及内容


def getLinks(url):
try:
html = urlopen(url)
except (HTTPError, URLError) as e:
print(e)
bsObj = BeautifulSoup(html, 'lxml')
return bsObj.find('dd', {'class': 'desc'}).find_all('a', href=re.compile('^((/view/)*(/subview/)*)((?!:).)*$')) linkTest = getLinks('http://baike.baidu.com/link?url=FfHqPzChV9Iz7Kz0d2Mke-1njFShGt8fsFJ5mmyh-t48rnjLMbQNyeBFfmUz3oOCVvRSt0GHJ-nXDqbq9bgrZldbYDPUiQBNckuTBiGt-2Uss1aIWbhj7ELhOfrF3XoFeK2I0mSJ1ERslKeS0wUXtK')
for link in linkTest:
if 'href' in link.attrs:
print('http://baike.baidu.com' + link.attrs['href'] + ' -- ' + link.get_text())
else:
print('not in it')
  • 打印结果如下:

练习抓取百度百科中人物 以及 人物 的老婆 或者 老公 就以 凯文·贝肯为例子

  • 要抓取的界面链接如图:

  • 打开网页检查查看代码如图:

  • 由于div标签的属性class="viewport"id="slider_relations是唯一的则先找到这个目标标签div -- bsObj.find_all('div', {'class': 'viewport','id':'slider_relations'})

  • 紧接着在目标标签div下查找标签a -- find_all('a'),找到后获取href属性children['href']并返回.

  • 其中不太了解的是 bsObj.find_all('div', {'class': 'viewport','id':'slider_relations'})[0].find_all('a')[0]两个中括号[0]取值是什么原理? 个人理解是 list -- 角标提取元素

  • 得到凯文·贝肯他老婆的链接后直接带入方法getLinks(url)得到凯文·贝肯,顺便在方法中打印出来各自链接对应的名字print(children.get_text())


# 百度百科夫妻
def getLinks(url):
try:
html = urlopen(url)
except (HTTPError, URLError) as e:
print(e)
bsObj = BeautifulSoup(html, 'lxml')
children = bsObj.find_all('div', {'class': 'viewport','id':'slider_relations'})[0].find_all('a')[0]
print(children.get_text())
return children['href'] newLink = getLinks('http://baike.baidu.com/link?url=FfHqPzChV9Iz7Kz0d2Mke-1njFShGt8fsFJ5mmyh-t48rnjLMbQNyeBFfmUz3oOCVvRSt0GHJ-nXDqbq9bgrZldbYDPUiQBNckuTBiGt-2Uss1aIWbhj7ELhOfrF3XoFeK2I0mSJ1ERslKeS0wUXtK')
print(newLink)
newLinkTwo = getLinks(newLink)
print(newLinkTwo)
  • 打印结果如下:

python3 - 通过BeautifulSoup 4抓取百度百科人物相关链接的更多相关文章

  1. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  2. python抓取百度百科点赞数等动态数据

    利用selenium 模拟浏览器打开页面,加载后抓取数据 #!/usr/bin/env python # coding=utf-8 import urllib2 import re from bs4 ...

  3. C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库

    第一步:首先需要将csv先装换成datatable,这样我们就容易进行对datatable进行遍历: /// 将CSV文件的数据读取到DataTable中 /// CSV文件路径 /// 返回读取了C ...

  4. python抓取360百科踩过的坑!

    学习python一周,学着写了一个爬虫,用来抓取360百科的词条,在这个过程中.因为一个小小的修改,程序出现一些问题,又花了几天时间研究,问了各路高手,都没解决,终于还是自己攻克了,事实上就是对lis ...

  5. Python开发简单爬虫(二)---爬取百度百科页面数据

    一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...

  6. selenium-java web自动化测试工具抓取百度搜索结果实例

    selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...

  7. Python——爬取百度百科关键词1000个相关网页

    Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...

  8. Python爬虫之小试牛刀——使用Python抓取百度街景图像

    之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...

  9. C#.Net使用正则表达式抓取百度百家文章列表

    工作之余,学习了一下正则表达式,鉴于实践是检验真理的唯一标准,于是便写了一个利用正则表达式抓取百度百家文章的例子,具体过程请看下面源码: 一:获取百度百家网页内容 public List<str ...

随机推荐

  1. spring调用mongodb

    1.环境 Jdk:1.6.0_10-rc2 Spring3.1.2  下载 依赖jar文件: 2.相关配置 ①.spring配置文件 <?xml version="1.0" ...

  2. WIFI机器人网

    WIFI机器人网 WIFI智能小车机器人 外网远程控制WIFI智能小车机器人(WIFI板/703N)

  3. Intent的概念及应用(一)

    ------siwuxie095 1.显式Intent (1)先创建一个项目:LearnIntent,选择API:21 Android 5.0, 选择Empty Activity,完成 (2)创建一个 ...

  4. cocos2d动作讲解

    从本章开始,我们开始讲解cocos2d-x库的动作(Action).游戏的世界是一个动态的世界:无论是主角精灵还是NPC精灵都处于不断的运动当中,甚至是背景中漂流的树叶,随风而动的小草.这些明显的或者 ...

  5. Windows显示不了磁盘

    ps:当我的磁盘插电脑上却显示不了磁盘信息.终于最后将我的200G资料,搞没了,也不能恢复了..刚刚磁盘显示了,为了让更多人能不走弯路,我结合了网络能让磁盘显示的几个经验,也便大家方便参考...   ...

  6. vi的基本操作

    vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command m ...

  7. 数字(数学)操作类 Math Random 类 ,大数字操作类

    Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法

  8. UVa 10074 - Take the Land

    题目大意:和UVa 836 - Largest Submatrix差不多,只需要修改一下数据就可以了. #include <cstdio> #include <cstring> ...

  9. Android组件生命周期(三)

    Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程.为了决定保持哪个进程及杀死哪个进程,Android将每个进程放入一个基于运行于其中的组件的重要性等级和这 ...

  10. Delphi制作图像特殊显示效果

    Delphi制作实现图像的各种显示效果,比如百叶窗.渐变.淡入淡出.水平交错.雨滴效果等,用鼠标点击“打开图像”按钮,可以选择图像文件导入到窗体中:点击其它各个按钮,可以实现图像显示特效,例如:点击“ ...