繁体   English   中英

Python,如何使用lxml XPath?

[英]Python, How to use lxml XPath?

在 python 我有:

response = s.get(url, allow_redirects=False, cookies=cookies, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
reg_cart = soup.find('form', attrs={"name": "regCart"})
registered_courses = [i.a.text for i in reg_cart.find_all('div', attrs={"class": "course-number"})]

现在我想用lxml替换BeautifulSoup ,阅读:

https://timber.io/blog/an-intro-to-web-scraping-with-lxml-and-python/

我试图实现他们在那里使用的东西并得到:

import lxml.html
doc = lxml.html.fromstring(response.content)
registered_courses = doc.xpath('//div[@class="course-number"]/text()')

但由于某种原因,我的 output 是:

['\n\t\t\t\t\t', '\n\t\t\t\t', '\n\t\t\t\t\t', '\n\t\t\t\t', '\n\t\t\t\t\t', '\n\t\t\t\t', '\n\t\t\t\t\t']

虽然以前它正确显示了课程编号。

我怎样才能解决这个问题? 另外,如何编辑我的路径以仅返回表单regCart下的那些 div 标签而不是所有响应?

例如,html 代码如下所示:

        <form name="regCart" ....>
        </div><div class="entry-spacer"></div><div class="cart-entry">
                <div class="course-number">
                <a href="https://university.com/rishum/course/236756">236756</a>
            </div>
            <div class="course-name">
                מבוא למערכות לומדות              
            </div>
            <div class="course-points">
                3.0 נק'
            </div>
            <div class="entry-group">
                קבוצה 13
            </div>

我想返回236756

问题出在您的相对 xpath 中: //div[@class="course-number"]/text()

<div class="course-number">
  <a href="https://university.com/rishum/course/236756">236756</a>
</div>

这将抓取相应 div 下的文本字段; 但是,div 下没有文本。 感兴趣的文本字段其实在标签里面,正确的相对xpath是: //div[@class="course-number"]/a/text()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM