解析库的使用

1.使用Xpath
from lxml import tree
2.使用beautiful soap;

import requests
from bs4 import BeautifulSoup
r= requests.get(‘http://www.baidu.com’)
print(requests.utils.get_encodings_from_content(r.text))获取字符格式
r.encoding=‘gb2312’–设置为与上面一样的格式
s= BeautifulSoup(r.text,‘lxml’)
print(s.title.string)
print(s.prettify())–格式化解析的字符串格式
出现乱码,解决方案
https://www.cnblogs.com/bw13/p/6549248.html

节点选择器 :
选中的结果都是tag类型的
print(s.p)
s.head
s.title
提取信息:
1.获取名字:
可以通过name属性获取节点的名称
2.获取节点的属性:
每个节点有多个属性,可以调用attr获取所有的属性

print(s.a.attrs)
{‘href’: ‘http://news.baidu.com’, ‘name’: ‘tj_trnews’, ‘class’: [‘mnav’]}

print(s.a[‘class’])
[‘mnav’]

获取内容:
利用string属性获取节点包含的文本内容
嵌套选择:
s.head.title
关联选择:
没办法一次性选中某个节点,可以先选中要给节点,然后以它为基准选中它的子节点 父节点 兄弟节点
子节点和子孙节点

for i, child in enumerate(s.form.children):
… print(i,child)

0
1
2
3
4
5
6
7
8
9
10
父节点和祖先节点:
parents和parent

print(s.form.parent)
兄弟节点:

print(s.div.next_sibling)
print(s.div.previous_sibling)
print(list(enumerate(s.span.previous_siblings)))
[(0, ), (1, ’ '), (2, ), (3, ’ '), (4, ), (5, ’ '), (6, ), (7, ’ '), (8, ), (9, ’ '), (10, ), (11, ’ ')]

print(list(enumerate(s.input.next_siblings)))
[(0, ’ '), (1, ), (2, ’ '), (3, ), (4, ’ '), (5, ), (6, ’ '), (7, ), (8, ’ '), (9, ), (10, ), (11, ), (12, ’ ')]

方法选择器:
find_all()
查询所有符合条件的元素,传入一些属性或文本
find_all(name,attrs,recursive,text,*kwargs)
name:可以根据节点名来查询元素
attrs:根据属性查询
text:可用来匹配节点的文本,传入的形式可以字符串 也可以是正则表达式
find()
find_parents() 和find_parent()
CSS 选择器:
使用CSS选择器只需要调用select()方法
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,‘lxml’)
print(soup.select(’.panel .panel-heading’))
print(soup.select(‘ul li’)
使用pyquery
初始化pyquery ,可以使用HTML
from pyquery import PyQuery as pq
import requests,re

def getoneURL(url):
headers = {
‘Use-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0’
}

response = requests.get(url,headers=headers)
if response.status_code ==200:
    return response.text
return response.status_code

html=getoneURL(‘https://www.baidu.com/’)

doc =pq(html)

print(html)

print(doc(‘a’))
2.使用URL:
doc = pq(‘https://www.baidu.com/’)
3.使用文件初始化
doc=pq(filename=‘demo.html’)
基本Css选择器:
print(doc(’#form’))
查找节点:
查找子节点,用find()方法 传入参数CSS选择器,find 查找范围是节点的所有子孙节点,如果只想查找子节点,可以用children 方法
print(doc(’#form’).find(‘input’))
获取父节点:parent 和parents()两种
print(doc(’.mnav’).parent())
兄弟节点:
siblings()方法
获取信息:
通过调用attr()方法
获取文本:
text()
节点操作:
addclass 和removeclass()
可以通过removeclass 将class移除
通过Addclass()添加
attr text 和html 可以通过attr()方法对属性进行操作,可以用text()和html() 方法改变节点内部的内容
如果attr()方法只传入一个参数那么就是获取这个节点的属性值,如果传入第二个参数那么是可以修改这个参数的值的. 对于text()和html()方法,如果不传入参数就是获取内部的纯文本信息和HTML文本,如果传入参数就进行赋值修改
remove()
8.伪类选择器:
https://www.php.cn/css-tutorial-410312.html
http://www.w3school.com.cn/css/css_pseudo_classes.asp
http://www.w3school.com.cn/cssref/css_selectors.asp
伪类选择器功能很强大具体参看w3School来查看更多的详情,这里我直接搬运过来了.

选择器 例子 例子描述 CSS
.class .intro 选择 class=“intro” 的所有元素。 1
#id #firstname 选择 id=“firstname” 的所有元素。 1

    • 选择所有元素。 2
      element p 选择所有

      元素。 1
      element,element div,p 选择所有

      元素和所有

      元素。 1
      element element div p 选择

      元素内部的所有

      元素。 1
      element>element div>p 选择父元素为

      元素的所有

      元素。 2
      element+element div+p 选择紧接在

      元素之后的所有

      元素。 2
      [attribute] [target] 选择带有 target 属性所有元素。 2
      [attribute=value] [target=_blank] 选择 target="_blank" 的所有元素。 2
      [attribute~=value] [title~=flower] 选择 title 属性包含单词 “flower” 的所有元素。 2
      [attribute|=value] [lang|=en] 选择 lang 属性值以 “en” 开头的所有元素。 2
      :link a:link 选择所有未被访问的链接。 1
      :visited a:visited 选择所有已被访问的链接。 1
      :active a:active 选择活动链接。 1
      :hover a:hover 选择鼠标指针位于其上的链接。 1
      :focus input:focus 选择获得焦点的 input 元素。 2
      :first-letter p:first-letter 选择每个

      元素的首字母。 1
      :first-line p:first-line 选择每个

      元素的首行。 1
      :first-child p:first-child 选择属于父元素的第一个子元素的每个

      元素。 2
      :before p:before 在每个

      元素的内容之前插入内容。 2
      :after p:after 在每个

      元素的内容之后插入内容。 2
      :lang(language) p:lang(it) 选择带有以 “it” 开头的 lang 属性值的每个

      元素。 2
      element1~element2 p~ul 选择前面有

      元素的每个

      • 元素。 3
        [attribute^=value] a[src^=“https”] 选择其 src 属性值以 “https” 开头的每个 元素。 3
        [attribute = v a l u e ] a [ s r c =value] a[src =value]a[src=".pdf"] 选择其 src 属性以 “.pdf” 结尾的所有 元素。 3
        [attribute*=value] a[src*=“abc”] 选择其 src 属性中包含 “abc” 子串的每个 元素。 3
        :first-of-type p:first-of-type 选择属于其父元素的首个

        元素的每个

        元素。 3
        :last-of-type p:last-of-type 选择属于其父元素的最后

        元素的每个

        元素。 3
        :only-of-type p:only-of-type 选择属于其父元素唯一的

        元素的每个

        元素。 3
        :only-child p:only-child 选择属于其父元素的唯一子元素的每个

        元素。 3
        :nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个

        元素。 3
        :nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。 3
        :nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个

        元素的每个

        元素。 3
        :nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。 3
        :last-child p:last-child 选择属于其父元素最后一个子元素每个

        元素。 3
        :root :root 选择文档的根元素。 3
        :empty p:empty 选择没有子元素的每个

        元素(包括文本节点)。 3
        :target #news:target 选择当前活动的 #news 元素。 3
        :enabled input:enabled 选择每个启用的 元素。 3
        :disabled input:disabled 选择每个禁用的 元素 3
        :checked input:checked 选择每个被选中的 元素。 3
        :not(selector) :not§ 选择非

        元素的每个元素。 3
        ::selection ::selection 选择被用户选取的元素部分。 3
        总结:
        给pq对象传入一个查找参数就可以了, # 表示id, . 表示类 下一级就空格一下,这样就可以轻松的定位到我们需要的节点了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值