【发布时间】:2021-05-02 20:44:48
【问题描述】:
很抱歉,当您访问以下网站时,标题可以更好地描述问题:
右侧有一条文字,上面写着“查看全部”。单击该链接后,将弹出指向各种分叉的链接列表。我正在尝试抓取这些分叉的超链接。
一个问题是,刮板不仅会刮取分叉的链接,还会刮取配置文件的链接。他们不为这些链接使用特定的类或 ID。所以我编辑了我的脚本来计算哪个结果是正确的,哪个不是。那部分有效。然而,该脚本只抓取了几个链接,并没有抓取其他链接。这让我很困惑,因为起初我认为这是由于元素对硒不可见引起的,因为存在滚动。然而,这似乎不是问题,因为其他未抓取的链接通常是可见的。该脚本仅抓取前 5 个链接并完全跳过其余链接。
我现在不确定该怎么做,因为代码本身没有任何可能的问题的错误或警告。
这是抓取链接的一小段代码。
driver.get(url)
wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "button.see-all-forks"))).click()
fork_count = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "span.jsx-3602798114"))).text
forks = wait.until(ec.presence_of_all_elements_located((By.CSS_SELECTOR, "a.jsx-2470659356")))
j = 1
for i, fork in enumerate(forks):
if j == 1:
forks[i] = fork.get_attribute("href")
print(forks[i])
if j == 3:
j = 1
else:
j += 1
在这种情况下,“url”变量是我在上面提供的链接。然后循环在每个结果之后跳过 3 个结果,因为每 4 个结果都是正确的。我尝试使用 XPath 使用“包含”功能过滤掉结果,但是名称会随着用户自己命名而有所不同,因此据我所知,这是过滤掉结果的唯一方法。
这是我得到的输出。
在此之后不会打印任何结果,并且程序会终止而不会出现错误。这里发生了什么,我错过了什么?我很困惑为什么 Selenium 只抓取五个结果,然后终止。
编辑注释 - 我的代码解释:
我已经设置了 if 语句来检查每 4 个结果,因为它是正确的,但第一个也是正确的。如果 "j!=3" 则在 "j=3" (现在出现结果)后将 1 加到 "j" 上,如果 "j=1" 运行代码并打印正确的结果。所以正确的结果总是“j=1”。
【问题讨论】:
标签: python selenium selenium-webdriver web-scraping webdriver