我想从文本输入中提取第三行

时间:2019-07-07 22:39:06

标签: python-3.x selenium-webdriver web-scraping beautifulsoup

我必须提取文本的第三行。

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

4 个答案:

答案 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,请使用WebdriverWaitelement_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