前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第二篇 HTML元素的解析

第二篇 HTML元素的解析

作者头像
arcticfox
修改2019-06-26 19:35:47
8300
修改2019-06-26 19:35:47
举报
文章被收录于专栏:编程之路的专栏

Requests 库

这是一个网络请求库,主要的作用是可以模仿浏览器,发送网络请求,下载网页源码等。

上一篇已经讲了如何安装,不再赘述。

简单用法

代码语言:javascript
复制
 1  # 导入
 2  import requests
 3
 4  # 发起get请求
 5  resp = requests.get('https://github.com/timeline.json')
 6
 7  # 可通过text获取网页源码,返回的是字符串类型
 8  print(resp.text)
 9
10  # 还可通过content获取返回的二进制类型
11  print(resp.content)
12
13  # 发起post请求
14  resp = requests.post("http://httpbin.org/post")
15
16  HEADERS={"User-Agent":""}
17  # 可通过headers参数设置请求头,参数是一个字典类型
18  resp = requests.get('https://github.com/timeline.json',headers=HEADERS)

HTTP中的getpost是最常用的两种请求,其他请求详见HTTP协议内容。关于Requests库的更多用法,查看其官方中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

BeautifulSoup 库

关于HTML的解析,推荐使用BeautifulSoup库,因为简单易上手。

Beautiful Soup 中文文档 https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#

基本使用

代码语言:javascript
复制
 1  from bs4 import BeautifulSoup
 2  import requests
 3
 4  # 请求网页
 5  resp = requests.get('http://www.pythonscraping.com/exercises/exercise1.html')
 6
 7  # 将网页源码作为第一个参数出入,第二个参数指定解析器
 8  bsObj = BeautifulSoup
 9
10  print(bsObj.h1)

使用CSS选择器提取网页标签实例

代码语言:javascript
复制
 1  HEADERS = {
 2  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'
 3  }
 4
 5  resp = requests.get("https://www.tripadvisor.cn/Attractions-g293920-Activities-c47-t10-Phuket.html", headers=HEADERS)
 6
 7  # 这里使用lxml解析器进行解析
 8  bs = BeautifulSoup(resp.text,"lxml")
 9
10  # 调用BeautifulSoup的select函数,传入css选择器语法
11  for line in bs.select("div[class='listing_title '] a"):
12    print(line.string)

使用该库时,推荐使用CSS语法选择器进行标签提取,这种方式灵活且简洁。简单解释一下,"div[class='listing_title '] a"语法的含义是指,提取所有的满足条件的div标签下的a标签。中括号括起来的就是一个条件,意即div标签中必须有一个class属性,且该class属性中的值必须包含listing_title。这行CSS选择器语法还有一个语义更明确的等价写法 div[class='listing_title '] > a,其中>表示下一级

实例如下图

select函数返回的是一个所有满足条件的标签列表,如果要获取标签的文本内容,还要调一下.string

BeautifulSoup中的解析器

该库的第二个参数是指定解析器,除了html.parser是内置解析器,其他三种都是第三方的解析器,需要单独安装,推荐lxml解析器,性能最好。

安装命令如下,安装后即可使用

代码语言:javascript
复制
1  python -m pip install lxml

CSS选择器语法

常用语法如下

语法

说明

*

选择所有节点

#container

选择id为container的节点

.container

选择所有class包含container的节点

div,p

选择所有 div 元素和所有 p 元素

li a

选取所有li 下所有a节点

ul + p

选取ul后面的第一个p元素

div#container > ul

选取id为container的div的第一个ul子元素

ul ~p

选取与ul相邻的所有p元素

a[title]

选取所有有title属性的a元素

a[href=”http://baidu.com”]

选取所有href属性为http://baidu.com的a元素

a[href*=”baidu”]

选取所有href属性值中包含baidu的a元素

a[href^=”http”]

选取所有href属性值中以http开头的a元素

a[href$=”.jpg”]

选取所有href属性值中以.jpg结尾的a元素

input[type=radio]:checked

选择选中的radio的元素

div:not(#container)

选取所有id为非container 的div属性

li:nth-child(3)

选取第三个li元素

li:nth-child(2n)

选取第偶数个li元素

a::attr(href)

选取a标签的href属性

a::text

选取a标签下的文本

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程之路从0到1 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Requests 库
  • BeautifulSoup 库
    • BeautifulSoup中的解析器
      • CSS选择器语法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档