BeautifulSoup requests 爬虫初体验

BeautifulSoup requests 爬虫初体验


说爬虫不得不提python

常用的Python爬虫库(摘自知乎hunt zhan)

  • Beautiful Soup。名气大,整合了一些常用爬虫需求。缺点:不能加载JS。
  • Scrapy。看起来很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。
  • mechanize。优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
  • selenium。这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
  • cola。一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高,不过值得借鉴。

Beautiful Soup 网页解析还是非常简单粗暴的(配合requests)基本的爬取没有任何问题

在这个数据称王的时代,没有数据对于内容性产品而言无疑是半条腿走路。(虽说这样做有些不要脸,但是没有办法,一些公开无版权的内容信息诱惑力太大,如果人工摘取工作量太复杂)

废话少说,劈柴

1.安装库
pip install beautifulsoup4
pip install requests
  • 安装解析器
pip install lxml
解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser") Python的内置标准库执行速度适中文档容错能力强 Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml") 速度快文档容错能力强 需要安装C语言库
lxml XML 解析器 BeautifulSoup(markup, ["lxml-xml"])``BeautifulSoup(markup, "xml") 速度快唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib") 最好的容错性以浏览器的方式解析文档生成HTML5格式的文档 速度慢不依赖外部扩展
2.具体步骤
st=>start: 使用requests请求到网页html
op1=>operation: 使用beautifulsoup4加载这个html
op2=>operation: 解析搜索网页可用元素
op3=>operation: 取出元素的内容
op4=>operation: 处理数据
e=>end: 存库

st->op1->op2->op3->op4->e
3.常用操作
# 加载网页对象,使用lxml解析库
soup = BeautifulSoup(html, 'lxml')

# 获取class为more的标签
bp = soup.find_all(attrs={"class": 'more'})

# 获取<main></main>标签
bp = soup.main

# 查找所有p标签
p = soup.find_all('p')

# 使用正则匹配(含有data-number属性并且值为数字的)
soup.find_all(attrs={"data-number": re.compile("^[0-9]*$")})

# 获取main标签下的所有子标签
as = soup.main.descendants

# 遍历子标签
for child in as:
    # 判断子标签是否为tag(因为只有tag才能继续查找,NavigableString只是一个字符串)
    if isinstance(child, Tag):
        # 如果标签是span标签并且含有id属性且id属性的值为counter且内容不为空
        if child.name == 'span' and 'id' in child.attrs and child['id'] == 'counter' and child.string:
            # 取出该标签下一个兄弟标签的第一个子标签的内容
            # .contents 和 .children
            # tag的 .contents 属性可以将tag的子节点以列表的方式输出:
            child.next_sibling.contents[0].string
            
# 获取所有子标签的内容并过滤空内容
for string in soup.main.stripped_strings:
    print(string)

# 父标签
child.parent
# .next_sibling 和 .previous_sibling 分别是下一个兄弟标签和上一个兄弟标签

# 如果要去属性值可以直接使用
child['src']

熟悉以上操作就可以很方便的爬取html纯数据网页,你值得拥有!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容