<ul>
<li class="top-space"><span class="rowtit">专辑:</span><p>信息科技</p>
</li>
<li class="top-space"><span class="rowtit">专题:</span><p>人口学与计划生育; 贸易经济</p>
</li>
<li class="top-space"><span class="rowtit">分类号:</span><p>C924.2;F752</p>
</li>
</ul>
上边的图是代码
(1)想定位这个专辑后面的“信息科技“这段文字信息如何抓取啊,不同网页他的专题和分类号的位置可能在专辑的前面也可能在后面,
(2)定位标题时用的代码:
title=soup.find('div',class_= 'wx-tit').find('h1').text.strip()
用这种格式应该怎么写
你是指定位所有和专辑一并出现的主题吧
import bs4
x = """<?xml version="1.0" encoding="UTF-8"?>
<ul>
<li class="top-space">
<span class="rowtit">专辑:</span>
<p>信息科技</p>
</li>
<li class="top-space">
<span class="rowtit">专题:</span>
<p>人口学与计划生育; 贸易经济</p>
</li>
<li class="top-space">
<span class="rowtit">分类号:</span>
<p>C924.2;F752</p>
</li>
</ul>
"""
soup = bs4.BeautifulStoneSoup(x)
res = soup.find_all('p')[0]
print(res)
正则:
x = """<?xml version="1.0" encoding="UTF-8"?>
<ul>
<li class="top-space">
<span class="rowtit">专辑:</span>
<p>信息科技</p>
</li>
<li class="top-space">
<span class="rowtit">专题:</span>
<p>人口学与计划生育; 贸易经济</p>
</li>
<li class="top-space">
<span class="rowtit">分类号:</span>
<p>C924.2;F752</p>
</li>
</ul>
"""
import re
res = re.findall(r"专辑:</span>.*?<p>(.*?)</p>",x, re.DOTALL)
print(res)
需求
想爬到信息科技这个内容,其他页面的格式会有变化,有的分类号在前面,他们属性一样,我不知道怎么定位了,就是知网点开文章的那个页面爬取
<li class="top-space"><span class="rowtit">专辑:</span><p>信息科技</p>
</li>
<li class="top-space"><span class="rowtit">专题:</span><p>人口学与计划生育; 贸易经济</p>
</li>
<li class="top-space"><span class="rowtit">分类号:</span><p>C924.2;F752</p>
解决办法
也就是专辑、专题、分类号这三个顺序可能是乱序无规则的导致你无法定位。
那么为什么不尝试把这三个都定位一下,
1、获取三个元素,每个都获取span里面的内容和p的内容,放在一个list或者dict里面
2、然后加个判断,如果span的内容中包含'专辑'两使用这个个词,那么就知道这个对应的p里面的内容是你想要的。
给个思路吧,可以先定位
如果单纯拿这个的话,其实正则表达式很合适<li class="top-space"><span class="rowtit">专辑:</span><p>(.*?)</p>
import re
mData = '''
<ul>
<li class="top-space"><span class="rowtit">专辑:</span><p>信息科技</p>
</li>
<li class="top-space"><span class="rowtit">专题:</span><p>人口学与计划生育; 贸易经济</p>
</li>
<li class="top-space"><span class="rowtit">分类号:</span><p>C924.2;F752</p>
</li>
</ul>
'''
print(re.findall('<li class="top-space"><span class="rowtit">专辑:</span><p>(.*?)</p>', mData))
使用正则表达式