Python 3 爬虫的自我探索(三)

Step 1 : 获取HTML文件的内容

# encoding: UTF-8
# 爬虫获取:南方电网招标采购信息
import requests

# 定义主入口网址
main_url = "http://www.bidding.csg.cn/zbcg/index.jhtml"

# 请求网址
r = requests.get(main_url)

# 打印:返回结果的类型,状态码,编码方式,Cookies
print(type(r))
print(r.status_code)
print(r.encoding)
print(r.cookies)

# 打印返回的内容
print(r.text)

Step 2 : 创建BeautifulSoup对象

from bs4 import BeautifulSoup

requests

1. 基本Get

支持get, put, delete, head, options

r = request.get('http://www.baidu.com')

加参数的Get(Params)

url = 'http://.......'
payload = {'key1':'value1', 'key2':'value2'}
r = request.get(url, params=payload)

BeautifulSoup

四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
- Tag
- NavigableString
- BeautifulSoup
- Comment

1. Tag

  1. Tag通常来说就是HTMl中的一个标签。可以用来查找一个标签的内容,比如此处获取 title 标签:
print soup.title
  1. 对于Tag,有两个重要的属性
    • name
    • print soup.title.name
    • 输出对象的名称
    • attrs
    • print soup.a.attrs
    • 输出对象的属性,类型是一个字典
    • 获取单独某个属性
    • print soup.a[href]
    • `print soup.a.get('href')

2. NavigableString

获取标签内部的文字

print soup.a.string

3. BeautifulSoup对象

BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性

4. Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。

遍历文档树

1. 直接子节点

  • .contents
    • tag 的 .content 属性可以将tag的子节点以列表的方式输出
    • print soup.head.contents
    • print soup.head.contents[0]
  • .children
    • print soup.head.children
    • for child in soup.body.children:print child

2. 所有子孙节点

  • .descendants
    • for child in soup.descendants:print child

3. 节点内容

如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容

4.多个内容

1. .strings

获取多个内容,不过需要遍历

2. .stripped_strings

输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容

父节点(加s表示全部)

Tag的父节点:Tag.parent
- .parent

兄弟节点(加s表示全部)

Tag的兄弟节点:Tag.next-sibling
- .next_sibling
- .previous_sibling

搜索文档树

find_all(name, attrs, recursive, text, **kwargs)

搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

  • name

    • 可以查找所有名字为name的tag,字符串对象会被忽略
    • A. 传字符串
      • print soup.find_all('a')
      • 查找文档中所有的标签
    • B. 传正则表达式
      • soup.find_all(re.compile("^b"))
      • 查找文档中以b开头的标签
    • C. 传列表
      • soup.find_all(['a','b')
      • 查找文档中全部a和b标签
    • D. 传True
      • 查找全部Tag,但是不会返回字符串节点
    • E. 传方法
      • 还可以定义一个方法,方法只接受一个元素参数 [4] ,如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是则反回 False
  • KeyWord

    • 如果传入 href 参数,Beautiful Soup会搜索每个tag的”href”属性
      • soup.find_all(href=re.compile("elsie"))
    • 使用多个指定名字的参数可以同时过滤tag的多个属性
      • soup.find_all(href=re.compile("elsie"), id='link1')
  • text
    • 搜索字符串内容
    • 同样可以像name的可选参数一样
发布了34 篇原创文章 · 获赞 5 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章