【问题标题】:How to navigate specific tag in beautiful soup?如何在美丽的汤中导航特定标签?
【发布时间】:2019-01-27 12:26:04
【问题描述】:

我想浏览网站上的特定标签。在这个网站上,很少有类似这样的标签 我只想导航其中一个。 每次我运行代码时,我都会得到不同的输出。

import bs4 as bs
import urllib

source = urllib.urlopen("https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98").read()
soup = bs.BeautifulSoup(source, 'lxml')

for paragraph in soup.find('div', style = "width: 40%;/* float: left; */"):
    print(paragraph)

【问题讨论】:

  • 也许你可以具体化你的查询,这样它只会找到一个元素?
  • 但是我该怎么做呢? :d
  • 你可以使用 css 选择器或 xpath 选择器来做到这一点
  • 大部分 'div' 的段落可能都继承自该 css。打开 F12 然后点击左上角的箭头,用它选择你要查找的元素,然后右键点击该行 -> 复制 -> 复制 CSS 选择器或 XPath
  • 所有的风格都是"width: 40%;/* float: left; */"imgur.com/a/F0fZsIz

标签: python beautifulsoup urllib


【解决方案1】:

每次我运行代码都会得到不同的输出。

是的。每次页面返回不同的结果。即使您的选择是错误的,也不能解释您每次打印的结果都不同。我运行了几次,每次都得到不同的结果。

from bs4 import BeautifulSoup
import requests
import pandas as pd
r = requests.get("https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98")
df=pd.read_html(r.text)
print(df)

输出

第一轮

[    0       1       2       3       4       5        6      7
0 NaN   ---00  2.4992  2.5700    2.64    2.63  2.59100  ---00
1 NaN   ---00  2.3593  2.4800    2.58   ---00     2.53  ---00
2 NaN   ---00  2.0493  2.2495   ---00  2.0500   2.2400  ---00
3 NaN   ---00  2.4300  2.5300    2.63  2.4510     2.58  ---00
4 NaN  2.3593  2.4100  2.4900  2.6300  2.4910     2.59  ---00
5 NaN   ---00  2.1593  2.4295   ---00  2.2010   2.4500  ---00
6 NaN  2.0400  2.1493  2.2495   ---00    2.05    ---00   2.24]

第 2 次运行

[    0       1       2       3       4       5        6      7
0 NaN   ---00  2.3593  2.4800    2.58   ---00     2.53  ---00
1 NaN   ---00  2.4300  2.5300    2.63  2.4510     2.58  ---00
2 NaN   ---00  2.1593  2.4295   ---00  2.2010   2.4500  ---00
3 NaN  2.3593  2.4100  2.4900  2.6300  2.4910     2.59  ---00
4 NaN  2.0400  2.1493  2.2495   ---00    2.05    ---00   2.24
5 NaN   ---00  2.4992  2.5700    2.64    2.63  2.59100  ---00
6 NaN   ---00  2.0493  2.2495   ---00  2.0500   2.2400  ---00]

理想情况下,根据您的代码,您每次运行代码时都应该得到2.41 的结果(在问题中给出)。

发生的情况是该页面在后台执行了一些 javascript 授权,然后才填充有效数据。

对于这些类型的页面,最好使用selenium

from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
driver = webdriver.Firefox()
driver.get('https://taripebi.ge/%E1%83%91%E1%83%94%E1%83%9C%E1%83%96%E1%83%98%E1%83%9C%E1%83%98%E1%83%A1-%E1%83%A4%E1%83%90%E1%83%A1%E1%83%94%E1%83%91%E1%83%98')
source = driver.page_source
soup =BeautifulSoup(source, 'lxml')
for paragraph in soup.find('div', style = "width: 40%;/* float: left; */"):
    print(paragraph)

输出

1号运行

2.41

第 2 次运行

2.41

【讨论】:

    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多