【发布时间】:2020-01-11 12:58:59
【问题描述】:
我开始从事一些网站抓取项目,但偶然发现在同一父标签中选择第二个标签时遇到了一些困难。我试过用谷歌,但我还是不能清楚地理解它。
我的代码如下所示:
url = 'url to site'
content = requests.get(url).text
soup = BeautifulSoup(content, 'lxml')
car_add = soup.find('div', class_='offer-wrapper')
ad_title = car_add.find('h3', class_='lheight22 margintop5').a.strong.text
ad_price = car_add.find('p', class_='price').text
ad_location = car_add.find('td', class_='bottom-cell').div.p.small.span.text
ad_time_and_location = car_add.find('td', class_='bottom-cell').div.p
print(ad_time_and_location.prettify())
这会打印出以下内容:
<p class="lheight16">
<small class="breadcrumb x-normal">
<span>
<i data-icon="location-filled">
</i>
Otopeni
</span>
</small>
<small class="breadcrumb x-normal">
<span>
<i data-icon="clock">
</i>
09:25
</span>
</small>
</p>
我想要做的是访问字符串'09:25'但是当我输入时:
ad_location = car_add.find('td', class_='bottom-cell').div.p.small.span.text
然后它会自动默认为第一个文本标签。
我尝试过使用 select() 方法,但它给了我一个空列表。谁能帮我解决这个问题?
谢谢!
【问题讨论】:
-
请提供一个 MCVE 示例。由于我们没有您输入的所有 HTML,请跳过请求代码,只需向我们提供重现此代码所需的 HTML sn-p。
-
您可以使用
find_all('span')获取所有span的列表,然后使用[1]从列表中获取第二个元素。 -
lxml .xpath 语法更好,你可以在表达式中直接有下标[1]
-
.xpath解决方案是How to select first element via XPath? -
@smci,谢谢你的提示。我对网络抓取真的很陌生,我刚刚学习这些解析器。再次感谢!
标签: python