Python / selenium webscraping

时间:2017-07-29 21:23:13

标签: python selenium

enter image description here获取data_links中的链接:     driver.get(链接)

review_dict = {}
# get the size of company
size = driver.find_element_by_xpath('//[@id="EmpBasicInfo"]//span')

#location = ???也需要得到这个部分。

我的担忧:

我正在试图抓一个网站。我正在使用selenium / python来跨越“501到1000名员工”和“Biotech& Pharmaceuticals”,但我无法使用xpath从网站中提取文本元素。我尝试过getText,获取属性一切。请帮忙!

这是每次迭代的输出:我没有得到文本值。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

似乎你只想要文本而不是与某个元素交互,一个解决方案是使用BeautifulSoup为你解析html,selenium获取JavaScript构建的代码,你应该首先使用html = driver.page_source获取html内容,然后您可以执行以下操作:

html ='''
<div id="CompanyContainer">
<div id="EmpBasicInfo">
<div class="">
<div class="infoEntity"></div>
<div class="infoEntity">
<label>Industry</label>
<span class="value">Woodcliff</span>
</div>
<div class="infoEntity">
<label>Size</label>
<span class="value">501 to 1000 employees</span>
</div>
</div>
</div>
</div>
'''  # Just a sample, since I don't have the actual page to interact with.
soup = BeautifulSoup(html, 'html.parser')
>>> soup.find("div", {"id":"EmpBasicInfo"}).findAll("div", {"class":"infoEntity"})[2].find("span").text
'501 to 1000 employees'

或者,当然,避免特定索引并查找<label>Size</label>,它应该更具可读性:

>>> [a.span.text for a in soup.findAll("div", {"class":"infoEntity"}) if (a.label and a.label.text == 'Size')]
['501 to 1000 employees']

使用selenium即可:

>>> driver.find_element_by_xpath("//*[@id='EmpBasicInfo']/div[1]/div/div[3]/span").text
'501 to 1000 employees'