Selenium 中的刮擦问题。它不刮
Posted
技术标签:
【中文标题】Selenium 中的刮擦问题。它不刮【英文标题】:Problem with scraping in Selenium. It does not scrape 【发布时间】:2022-01-02 07:29:27 【问题描述】:我想得到轮数(14、15、16、17 等),然后只刮数字,没有“.ROUND”。我写了一个基本版本和一个更好的版本,但它们不起作用。我没有收到错误,但我收到了>>>>
(没有任何文字)。怎么办?
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 20)
Values_PremierLeague = []
driver.get("https://www.betexplorer.com/soccer/england/premier-league/fixtures/")
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "th.h-text-left")))
for PremierLeague in driver.find_elements(By.CLASS_NAME, "th.h-text-left"):
PremierLeague_text = PremierLeague.text
Values_PremierLeague.append(tuple([PremierLeague_text]))
print(PremierLeague_text)
driver.close
或
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
wait = WebDriverWait(driver, 20)
Values_PremierLeague = []
driver.get("https://www.betexplorer.com/soccer/england/premier-league/fixtures/")
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".table-main__datetime")))
for PremierLeague in driver.find_elements(By.XPATH, "//*[@class='h-text-left' and contains(text(),'Round')]"):
PremierLeague_text = PremierLeague.text
number = re.findall(r'\d+', s)
Values_PremierLeague.append(tuple([number]))
print(number)
driver.close
更新
CREATE TABLE "BASE_Giornate" (
"ID_Round" INTEGER,
"Number_Round" INTEGER,
"Id_Tournment" INTEGER,
PRIMARY KEY("ID_Giornata" AUTOINCREMENT)
);
而且代码已经在工作了
sqlite_insert_query_PremierLeague = 'INSERT INTO BASE_Giornate (Number_Round) VALUES (?);'
cursor.executemany(sqlite_insert_query_PremierLeague, Values_PremierLeague)
count_squadre_PremierLeague = cursor.rowcount
con.commit()
【问题讨论】:
所以第一个你不小心使用了类名而不是css选择器。 s 应该是第二个中的premier_League_text。 @ArundeepChohan 是的。第一个错误的类名,并且在任何情况下都没有通过消除“.ROUND”来刮取数字的设置。第二个应该可以工作,但是有问题。你能帮助我吗?谢谢 【参考方案1】:driver.get("https://www.betexplorer.com/soccer/england/premier-league/fixtures/")
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".table-main__datetime")))
for PremierLeague in driver.find_elements(By.XPATH, "//*[@class='h-text-left' and contains(text(),'Round')]"):
PremierLeague_text = PremierLeague.text
number = re.findall(r'\d+', PremierLeague_text)
Values_PremierLeague.append(tuple([number]))
print(number)
不知道你所说的数字是什么意思,也不知道你为什么想要元组。但是您遇到了一个问题,您从未使用过 PremierLeague_text
输出:
['13']
['14']
['15']
['16']
['17']
['18']
['19']
['20']
['21']
['22']
['23']
['24']
['25']
['26']
['27']
['28']
['29']
['30']
['31']
['32']
['33']
['34']
['35']
['36']
['37']
['38']
【讨论】:
这正是我想要实现的。谢谢。我的意思是这个数字。至于元组,我必须将这些数字保存在数据库的一列中,并且我还必须为其他不同的锦标赛抓取。在这一点上你让我怀疑:元组不是必需的吗? 如果你没有多个值,最好只做一个数组。 嗯,好的。它只有 1 个值。我应该如何处理数组? (如果你想你可以不回答)。无论如何,我会为你的答案投票。谢谢 对不起。我不知道如果它被关闭你无法回答。我暂时重新打开了它(然后我将再次关闭它)。对不起,谢谢你 哦不知道你的数据库是怎么设置的,所以不能评论以上是关于Selenium 中的刮擦问题。它不刮的主要内容,如果未能解决你的问题,请参考以下文章
使用 Selenium 时不完整的 BeautifulSoup 刮擦
java 从Pluralsight下载视频使用Selenium来刮擦
为啥不可点击,但 execute_script 有意义。 href 中的 Python、Selenium、JS [重复]