首先我是Python的新手,请原谅这些愚蠢的问题。
我正在使用Robobrowser并使用以下代码启动浏览器。请注意,我必须首先登录该网站,然后导航到搜索结果页面(我已经硬编码):
from robobrowser import RoboBrowser
from datetime import datetime
import re
import csv
browser = RoboBrowser(history = True, parser = 'html.parser', user_agent='chrome')
browser.open('https://cas.columbia.edu/cas/login?service=https%3a%2f%2fwww1.columbia.edu%2fsec-cgi-bin%2fcul%2fprox%2fezpwebserv-ezproxy.cgi%3furl%3dezp.2aHR0cDovL3d3dy5yZWZlcmVuY2V1c2EuY29t')
form = browser.get_form(class_='fm-v clearfix' )
form['username'].value = '**************'
form['password'].value = '**************'
browser.submit_form(form)
url = 'http://www.referenceusa.com.ezproxy.cul.columbia.edu/UsBusiness/Result/41526a3b232941b0ae8df36a9870fec6'
browser.open(url)
我要做的是构建一个刮刀以从ReferenceUSA获取数据。我打开网站并查看HTML我看到我要编码的元素:
<a href="#" class="action-view-record" data-all-url="/UsBusiness/Detail/All/41526a3b232941b0ae8df36a9870fec6/0?recordId=366190858" data-tagged-url="/UsBusiness/Detail/Tagged/41526a3b232941b0ae8df36a9870fec6?recordId=366190858">034 Efi</a>
从这里我想得到文本,所以我尝试了:
companies = browser.find_all(class_='action-view-record')
for company in companies:
company_name = company.text
print(company_name)
问题在于,当我运行代码时,不会打印任何内容。我认为该页面打开正确,因为我尝试了:
links = browser.find_all('a')
for link in links:
print(link.text)
并列出页面顶部/底部的所有导航链接(例如关于我们,联系方式等)。但是没有来自实际搜索结果的链接。
我还希望从此标记中获取链接,以便我可以按照页面进入详细信息。在这里,我还有一个问题,那就是HREF ='#'。那么我该如何获得链接?
谢谢!
答案 0 :(得分:1)
所以我不确定如何解释这个,但是类值是标签&#34; a&#34;的属性。有两种主要方法可以解决这个问题,
1)
companies = browser.find_all(a)
for company in companies:
if company.has_attr("class") and company.attrs['class'] == "action-view-record":
print(company.text)
2)
另一种更清洁的方法是通过在find_all函数中实际指定attrs来实现。这可以按如下方式完成:
companies = browser.find_all("a", {"class": "action-view-record"})
for company in companies:
print(company.text)
当然,因为python是蜜蜂的膝盖,你实际上可以在列表理解中完成所有这些:
companies = [company.text for company in browser.find_all("a", {"class": "action-view-record"})]
希望这有帮助。
更新:
我之前从未使用过robobrowser,但似乎你可以找到github page:
<div class="teaser-icon">
<span class="mega-octicon octicon-checklist"></span>
</div>
使用 -
browser.find('div.teaser-icon')
所以......这可能适合你,
browser.find('a.action-view-record')
如果元素位于另一个元素的旁边,也确保你在html树中的正确位置 -
<head>
<body>
<a class="action-view-record"> TEXT </a>
</body>
</head>
你可能需要像这样从身体中找到(&#34; a&#34;)。
head = browser.find('head')
body = head.find("body")
atags = body.find_all("a")