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()')
但出于某种原因我的输出是:
['\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']
虽然之前它能正确显示课程编号。
我该如何解决这个问题?另外,我如何才能将 return 的路径编辑为 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>
我想去的地方return236756
问题出在您的相对 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()
在 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()')
但出于某种原因我的输出是:
['\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']
虽然之前它能正确显示课程编号。
我该如何解决这个问题?另外,我如何才能将 return 的路径编辑为 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>
我想去的地方return236756
问题出在您的相对 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()