美文网首页
BeautifulSoup requests 爬虫初体验

BeautifulSoup requests 爬虫初体验

作者: Oort | 来源:发表于2019-05-23 16:02 被阅读0次

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纯数据网页,你值得拥有!

相关文章

网友评论

      本文标题:BeautifulSoup requests 爬虫初体验

      本文链接:https://www.haomeiwen.com/subject/sjlbzqtx.html