使用selenium和beautifulsoup进行网络报废..解析和选择按钮时遇到麻烦

时间:2017-10-15 06:24:19

标签: python html-parsing selenium-chromedriver

我正在尝试通过网站拦截以下网站“url ='https://angel.co/life-sciences' “。该网站包含8000多个数据。从这个页面我需要公司名称和链接,加入日期和关注者等信息。在此之前,我需要通过点击按钮对关注者列进行排序。然后通过点击更多隐藏来加载更多信息页面是最多可点击(更隐藏)的内容20次,之后它不会加载更多信息。但是我可以通过排序来获取顶级关注者信息。这里我实现了click()事件,但它是显示错误。

Unable to locate element: {"method":"xpath","selector":"//div[@class="column followers sortable sortable"]"} #before edit this was my problem, using wrong class name

那么我需要在这里给予更多的睡眠时间吗?(试过给出但同样的错误)

我需要解析以上所有信息,然后访问那些网站的个别链接,只扫描该html页面的内容div。

请建议我这样做的方法

这是我当前的代码,我没有使用beautifulsoup添加html解析部分。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from selenium import webdriver 
from bs4 import BeautifulSoup
#import urlib2
driver = webdriver.Chrome()
url='https://angel.co/life-sciences'
driver.get(url)
sleep(10)

driver.find_element_by_xpath('//div[@class="column followers sortable"]').click()#edited
sleep(5)
for i in range(2):
    driver.find_element_by_xpath('//div[@class="more hidden"]').click()
    sleep(8)

sleep(8)
element = driver.find_element_by_id("root").get_attribute('innerHTML')
#driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
#WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'more hidden')))
'''
results = html.find_elements_by_xpath('//div[@class="name"]')
 # wait for the page to load

for result in results:
    startup = result.find_elements_by_xpath('.//a')
    link = startup.get_attribute('href')
    print(link)
'''
page_source = driver.page_source

html = BeautifulSoup(element, 'html.parser')
#for link in html.findAll('a', {'class': 'startup-link'}):
#       print link

divs = html.find_all("div", class_=" dts27 frw44 _a _jm")

上面的代码正在运行,在我添加了Followers click事件之前给了我html源代码。

我的最终目标是将所有这五个信息导入CSV或xls文件,例如公司名称,其链接,加入日期,关注者数量和公司描述(访问其各自链接后将获得)。

感谢帮助和评论。 这是我的第一个python工作和selenium,所以很少有困惑和需要指导。

谢谢: - )

2 个答案:

答案 0 :(得分:1)

click方法旨在模拟鼠标点击;它可用于可以单击的元素,例如按钮,下拉列表,复选框等。您已将此方法应用于不div元素>可点击。 divspanframe等元素用于组织HTML并提供字体装饰等。

要使此代码有效,您需要识别页面中实际可点击的元素。

答案 1 :(得分:0)

我在这里输掉了我的输入错误或一些愚蠢的错误,我使用的是div类错误,它是"列追随者可排序"相反,我正在使用"列追随者排序选择"。 :-( 现在上面的工作相当不错..但是有人能引导我使用beautifulsoup HTML解析部分吗?