【问题标题】:Python read forms in webpagePython在网页中读取表单
【发布时间】:2021-04-24 01:23:09
【问题描述】:

我阅读了一些html格式的网页内容,格式如下:

<div class="cart">
                    <div class="cart-title">
                        <img src="https://ug3.technion.ac.il/rishum/img/regCourses.png" width="50" height="50" alt="My Courses">
                        המקצועות שלי
                    </div><div class="entry-spacer"></div><div class="cart-entry">
                    <div class="course-number">
                    <a href="https://ug3.technion.ac.il/rishum/course/104134">104134</a>
                </div>
                <div class="course-name">
                    אלגברה מודרנית ח                 
                </div>
                <div class="course-points">
                    2.5 נק'
                </div>
                <div class="entry-group">
                    קבוצה 11
                </div><div class="change-group">
                שנה קבוצה ל
                <select name="UPG104134" onchange="showWaitAndSubmit('regCart')" class="change-group-options">
                    <option value=""> </option><option>12</option><option>13</option><option>21</option><option>22</option><option>23</option>
                </select>
                </div><div class="more-actions">
                </div>
                    <div class="clear"></div></div><div class="entry-spacer"></div><div class="cart-entry">
                    <div class="course-number">
                    <a href="https://ug3.technion.ac.il/rishum/course/234118">234118</a>
                </div>
                <div class="course-name">
                    ארגון ותכנות המחשב               
                </div>
                <div class="course-points">
                    3 נק'
                </div>
                <div class="entry-group">
                    קבוצה 22
                </div><div class="change-group">
                שנה קבוצה ל
                <select name="UPG234118" onchange="showWaitAndSubmit('regCart')" class="change-group-options">
                    <option value=""> </option><option>11</option><option>12</option><option>13</option><option>14</option><option>21</option>
                </select>
                </div><div class="more-actions">
                </div>
                    <div class="clear"></div></div><div>

现在的问题是如何阅读我的图片中以蓝色显示的课程编号??

以下是课程编号在网页中的显示示例:

<div class="course-number">
                    <a href="https://ug3.technion.ac.il/rishum/course/104134">104134</a>
                </div>

我想阅读:104134 在这个例子中

【问题讨论】:

  • 我希望将所有课程编号保存在列表或类似内容中
  • 注意:我非常关心性能并希望使用 lxml 来做到这一点
  • 这是一个 HTTPS 页面
  • 我不知道用什么替换这个:print(tree.xpath('//a/@href')) 与

标签: python html python-3.x python-requests


【解决方案1】:

首先,我建议使用 BeautifulSoup 来解析 HTML,然后,在我的脑海中,你应该像这样挖掘那些具有类名的 div 标签。

from bs4 import BeautifulSoup

r = requests.get(<your-target>)

soup = BeautifulSoup(r.text, 'lxml')

numbers = [i.a.text for i in soup.find_all('div', attrs={"class": "course-number"})]

我没有检查这个,但如果它真的不起作用,考虑到这一点,你应该找到一个解决方案。查看BeautifulSoup 的文档了解更多信息。

注意,在前面的循环中,如果i没有a标签会抛出错误,所以如果你不相信网站的结构总是一样的,最好做一个正常的for-loop 并有一个 try-except 或以某种方式处理它。

请注意,前面的方法将获取所有div 类为course-number 的标签。您可能只需要其中的一个子集,因此您应该应用更多过滤或先遍历 HTML 树,直到到达目标内容的根目录。

【讨论】:

  • 嗨,我想使用我的 cmets 中提到的 lxml
  • 对不起,@马丁。我没有直接使用lxml,所以我无法为此提出解决方案。不过应该不会太难。值得注意的是,正如下面链接中的回复所示,BeautifulSoup 现在支持将 lxml 作为内部解析器,这可以提高性能,但仍不如纯 lxml。通过它,也许你会发现 BeautifulSoup 对你的场景来说已经足够好了。 stackoverflow.com/questions/4967103/…
  • @martin 我没有测试我的代码。我现在已经更新并删除了这个问题。请注意,您应该将 lxml 安装在同一个 python 环境中。
  • 你的代码不起作用:numbers = [i.a.text for i in soup.find_all('div', class="course-number")] ^ SyntaxError: invalid syntax
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 2018-08-27
  • 2023-03-12
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多