我目前正在尝试在整个网页中抓取一些文本数据。我最初会抓取所有网页,然后慢慢浏览各个网页,从每个页面中抓取我需要的数据。由于动态ID,我在抓取诸如平方英尺或邻里之类的物品时遇到了麻烦。我通过XPath或CSS选择器看到的许多示例都涉及搜索文本,但是在我尝试抓取的每个页面上都发生了变化。有没有办法捕获平方英尺或附近地区?
home.html
代码当前能够获取链接,然后打开网页。我已经能够获取具有唯一名称元素的数据。
答案 0 :(得分:0)
您似乎正在尝试使用可变的CSS选择器根据内容的ID来查找元素(或元素的内容)。
如果是这样,我认为您需要在页面上搜索与特定模式匹配的元素。您可以通过两种不同的方式来完成此操作。
最简单的方法可能是列出要匹配的所有房地产网站的不同列表数据模式(即,在帖子的链接中,锚点的id元素都以相同的4个id字符(“ yui _ [...]”)和相同的href模式(“ / homedetails /[...]”)。
您可以使用此信息以及一些有用的XPath函数或CSS选择器来实现您的目标:
contains()
和starts-with()
XPath函数:
//div[contains(., "Desired text")]
//div[starts-with(., "Desired text")]
preceding
,preceding-sibling
,following
和following-sibling
轴,如果您知道需要定位的新生成的元素块的相对位置,可能会为您提供帮助还有 CSS选择器用于元素属性的部分匹配:
a[href*=desiredSubstring] # contains
a[href^=desiredSubstring] # starts-with
a[href$=desiredSubstring] # ends-with
您总是可以找到比所需更多的元素,并稍后在Python中将其过滤掉,例如:
import re
pattern = re.compile(r"^This \w+ text.$")
elements = driver.find_elements_by_css_selector("div.some_class")
for element in elements:
match = pattern.match(element.text)
if match:
print(element.text)
祝你好运!