python css 选择器的一个问题
本帖最后由 wanpojie 于 2021-9-8 00:58 编辑http://www.zszj.net/articles/4217.html
像是上图这种前后没有标签页的,要怎么用css选择器来拿到这一串汉字,或者哪里有比较小白的教程也可以,网上找了不少 基本上就是.class,#id
xpath可以挑出来,但是我还是想学学css选择器
通过title标签,得到了
【<title>
舟山造价协会 《关于印发《工程建设领域农民工工资专用账户管理暂行办法》的通知》
</title>】
但是我只想要中间的部分,正则表达式也不好整 </li><li data-name="articles">
<a href="/articles/3993.html" class="pull-left" data-name="link">
<i class="fa fa-caret-right faon2"></i>
住建部正式发布《工程总承包管理办法》,2020年3月1日起施行
</a><span class="pull-right" data-name="addtime">2020-01-02</span>
</li><li data-name="articles">
<a href="/articles/4002.html" class="pull-left" data-name="link">
<i class="fa fa-caret-right faon2"></i>
关于进一步加强房屋建筑和市政基础设施工程招标投标监管的指导意见
</a><span class="pull-right" data-name="addtime">2020-01-01</span>
</li>
</ul>
我尝试在主页面标题里面找title = selector.css('.fa fa-caret-right faon2').get() 或者是getall都不行 兄弟 我喜欢用pyquery因为我jquery写的熟练点, 凑合看{:1_926:}
from pyquery import PyQuery as pq
html_el = '''
</li>
<li data-name="articles">
<a href="/articles/3993.html" class="pull-left" data-name="link">
<i class="fa fa-caret-right faon2"></i>
住建部正式发布《工程总承包管理办法》,2020年3月1日起施行
</a><span class="pull-right" data-name="addtime">2020-01-02</span>
</li>
<li data-name="articles">
<a href="/articles/4002.html" class="pull-left" data-name="link">
<i class="fa fa-caret-right faon2"></i>
关于进一步加强房屋建筑和市政基础设施工程招标投标监管的指导意见
</a><span class="pull-right" data-name="addtime">2020-01-01</span>
</li>
</ul>
'''
# 获取html内容
doc = pq(html_el)
# 获取元素列表
row_list = doc("")
# 遍历获取内容
for row_item in row_list.items():
row_title = row_item(".pull-left").text()
print(row_title)
输出
(venv) PS E:\project\pro_demo\scrapy> & e:/project/pro_demo/scrapy/venv/Scripts/python.exe e:/project/pro_demo/scrapy/re_test.py
住建部正式发布《工程总承包管理办法》,2020年3月1日起施行
关于进一步加强房屋建筑和市政基础设施工程招标投标监管的指导意见 你红框标记的字符串 ,就是被div包裹着,其中css就是class=r_title_h4
你直接获取css元素r_title_h4就行了 通过css按class去选择的话是能正常的.. 建议放下完整代码
document.getElementsByClassName('r_title h4').item(0).textContent
"关于取消工程造价咨询企业资质审批加强事中事后监管的通知↵"
wanpojie 发表于 2021-9-8 00:47
...
你要获取的是,被哪个标签包裹的字符串,不是获取字符串前面的元素
应该获取<a >标签里的class="pull-left"元素,因为字符串是被a标签里
<a***** class="pull-left">住建部正式发布《工程总承包管理办法》,2020年3月1日起施行</a>
字符串被哪个标签包裹,就获取该父级元素。
假设a标签中没有class,就继续往上查找父级元素
<li class="pull-left">
<a >住建部正式发布《工程总承包管理办法》,2020年3月1日起施行</a>
</li>
这时a标签没有class了,但是上级li标签有class,就获取li标签的class即可 Text()就可以拿到标签内页面展示的内容 wanpojie 发表于 2021-9-8 00:47
...
你好你这选择器写错了, 通一个class里的类是不带空格且带. 应该是(".fa.fa-caret-right.faon2"), 最重要的你取错元素了,取文字的话应该是('li a.pull-left')试一试 wanpojie 发表于 2021-9-8 00:47
...
.fa fa-caret-right faon2,明显是一个i标签,获取a就好。
这些文章一般都要找规律,不一定每篇文章主体内容里面标签一样,可以找到主要标签位置,先切片,排除干扰,然后再取内容,要是再不好取,就开终极大招:取出全部内容去掉页面所有标签部分。 暮光微暖 发表于 2021-9-8 09:05
兄弟 我喜欢用pyquery因为我jquery写的熟练点, 凑合看
from pyquery import PyQuery as pq
先感谢老哥我在网上看了不少有css,xpath,bs4,还有pq,脑子浆糊了,好像每个都知道一点儿但是操作起来又每个都不确定。。。。
页:
[1]
2