在某些网络链接中为空时无法重新定义变量(Python Selenium)
Cannot redefine variable when empty in some weblinks (Python Selenium)
我有一个包含 link 列表的变量 (urllinks)。我使用 for 循环转到每个 link 并抓取数据,我在每个 link 中收集昵称和真实姓名。我下面的代码有效,除了有一些 links 没有昵称,只有真实姓名。在那些情况下,实名的 css 选择器等于昵称的 css 选择器(在 link 有昵称的地方)。我想如果我做一个 if 语句说如果每个 link 的实名是空的,然后将它重新分配给正确的定义。但是,它没有用。任何建议都会非常有帮助
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")
realname = driver.find_elements_by_css_selector("subc")
#need to fix the case when there is no nickname and only realname. In those cases
#realname = driver.find_elements_by_css_selector("mainc")
if realname is None:
realname= driver.find_elements_by_css_selector("mainc")
for r in range(len(names2)):
temporarydata4 = {"Main": main[r].text,
"Sub": sub[r].text}
scraperresult2.append(temporarydata4)
我想这里有几个问题:
find_elements_by_css_selector
returns 网络元素列表。如果没有匹配它 returns 一个空列表,但它仍然是一个列表,而不是 None
.
- 要获取元素文本,我想这就是您想要的,您应该在返回的网络元素上应用
.text
- 你应该使用
try-except
和 find_element_by_css_selector
或者如果你使用 find_elements_by_css_selector
从列表中获取第一个元素
所以,我认为你的代码应该是这样的:
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")[0].text
realname = driver.find_elements_by_css_selector("subc")[].text
if realname is None:
realname= driver.find_elements_by_css_selector("mainc")[0].text
#continue with your code
我能够利用@Prophet 的直觉做我需要做的事!因为 driver.find.elements_by_css_selector 基本上是要存储一个列表。我所做的是:
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")
realname = driver.find_elements_by_css_selector("subc")
#need to fix the case when there is no nickname and only realname. In those
cases
#realname = driver.find_elements_by_css_selector("mainc")
if len(realname)==0:
realname= driver.find_elements_by_css_selector("mainc")
for r in range(len(names2)):
temporarydata4 = {"Main": main[r].text,
"Sub": sub[r].text}
scraperresult2.append(temporarydata4)
我有一个包含 link 列表的变量 (urllinks)。我使用 for 循环转到每个 link 并抓取数据,我在每个 link 中收集昵称和真实姓名。我下面的代码有效,除了有一些 links 没有昵称,只有真实姓名。在那些情况下,实名的 css 选择器等于昵称的 css 选择器(在 link 有昵称的地方)。我想如果我做一个 if 语句说如果每个 link 的实名是空的,然后将它重新分配给正确的定义。但是,它没有用。任何建议都会非常有帮助
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")
realname = driver.find_elements_by_css_selector("subc")
#need to fix the case when there is no nickname and only realname. In those cases
#realname = driver.find_elements_by_css_selector("mainc")
if realname is None:
realname= driver.find_elements_by_css_selector("mainc")
for r in range(len(names2)):
temporarydata4 = {"Main": main[r].text,
"Sub": sub[r].text}
scraperresult2.append(temporarydata4)
我想这里有几个问题:
find_elements_by_css_selector
returns 网络元素列表。如果没有匹配它 returns 一个空列表,但它仍然是一个列表,而不是None
.- 要获取元素文本,我想这就是您想要的,您应该在返回的网络元素上应用
.text
- 你应该使用
try-except
和find_element_by_css_selector
或者如果你使用find_elements_by_css_selector
从列表中获取第一个元素 所以,我认为你的代码应该是这样的:
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")[0].text
realname = driver.find_elements_by_css_selector("subc")[].text
if realname is None:
realname= driver.find_elements_by_css_selector("mainc")[0].text
#continue with your code
我能够利用@Prophet 的直觉做我需要做的事!因为 driver.find.elements_by_css_selector 基本上是要存储一个列表。我所做的是:
for a in urllinks:
driver.get(a)
nickname = driver.find_elements_by_css_selector("mainc")
realname = driver.find_elements_by_css_selector("subc")
#need to fix the case when there is no nickname and only realname. In those
cases
#realname = driver.find_elements_by_css_selector("mainc")
if len(realname)==0:
realname= driver.find_elements_by_css_selector("mainc")
for r in range(len(names2)):
temporarydata4 = {"Main": main[r].text,
"Sub": sub[r].text}
scraperresult2.append(temporarydata4)