我必须提取文本的第三行。
URL = 'https://simonsmith.github.io/github-user-search/#/search?q=benjamn'
browser = webdriver.Chrome()
browser.get(URL)
time.sleep(20)
content = browser.page_source
soup = BeautifulSoup(content)
for link in soup.find_all('a'):
n=link.get('href')
n = re.sub(r"\#",'',n)
print(n)
在此示例中,我只会从输出中收集 benjamn 并将其余的丢弃。
输出:
/
https://developer.github.com/v3/
/benjamn
/BenjamNathan
/benjamni
/benjamnnzz
/BenjamnTal
/benjamncresnik
/benjamn1012990
/benjamnsmith
/benjamn77
/BENJAMNDO4FO
/benjamnzzzz
/benjamn25
/benjamnn
/benjamn2
/benjamnwilliams
https://github.com/simonsmith/github-user-search
答案 0 :(得分:1)
您写道:
for link in soup.find_all('a'):
假设您改为:
links = list(soup.find_all('a'))
for link in links:
然后links[2]
将包含所需的链接。
等效地,您可以使用:
for i, link in enumerate(soup.find_all('a')):
并关注i == 2
所在的特定链接。
答案 1 :(得分:1)
您可以更好地优化选择器并使用CSS选择器
如果您使用
li .u-flex
或
[class^=User].u-flex
第一个更快;您将只获得15个与人的链接。如果您随后使用find_element_by_css_selector
,则只会返回第一个匹配项。
也就是说:
browser.find_element_by_css_selector("li .u-flex").get_attribute("href")
不需要BeautifulSoup
,但等效项是:
soup.select_one('li .u-flex')['href']
答案 2 :(得分:1)
要获取值benjamn
,请使用WebdriverWait
和element_to_be_clickable
和以下xpath。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
URL = 'https://simonsmith.github.io/github-user-search/#/search?q=benjamn'
browser = webdriver.Chrome()
browser.get(URL)
element=WebDriverWait(browser, 15).until(EC.element_to_be_clickable((By.XPATH,"(//a[starts-with(@class,'User_')]//p[starts-with(@class,'User_')])[1]")))
print(element.text)
本杰明
要打印所有文本值,请使用以下代码。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
URL = 'https://simonsmith.github.io/github-user-search/#/search?q=benjamn'
browser = webdriver.Chrome()
browser.get(URL)
elements=WebDriverWait(browser, 15).until(EC.visibility_of_all_elements_located((By.XPATH,"//a[starts-with(@class,'User_')]//p[starts-with(@class,'User_')]")))
for element in elements:
print(element.text)
输出:
benjamn
BenjamNathan
benjamni
benjamnnzz
BenjamnTal
benjamncresnik
benjamn1012990
benjamnsmith
benjamn77
BENJAMNDO4FO
benjamnzzzz
benjamn25
benjamnn
benjamn2
benjamnwilliams
答案 3 :(得分:1)
您可以使用硒,并利用xpath来获取该链接,并且一定不要像下面这样对索引进行硬编码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
LINK = 'https://simonsmith.github.io/github-user-search/#/search?q=benjamn'
with webdriver.Chrome() as driver:
wait = WebDriverWait(driver, 10)
driver.get(LINK)
expected_link = wait.until(EC.presence_of_element_located((By.XPATH,"//a[./*[contains(@class,'username')]]")))
print(expected_link.get_attribute("href"))
输出:
https://simonsmith.github.io/github-user-search/#/benjamn