私はこのサイトの内容を削っています: http://media.ethics.ga.gov/search/Lobbyist/Lobbyist_results.aspx?&Year=2016&LastName=A&FirstName=&City=&FilerID= ここで、姓はロビーリスト情報を取得するためにA-Zです。これはジョージア州オープンサイトの州です。セレクションを使用してaspnetリンクをクリックしてください
私はループのための基本的な内の各文字によって配列決定し、必要な基本的な情報を取得する(実際にどちらか/または)MechanizeのとSeleniumの組み合わせを使用しています。 (下のコード) Seleniumとmechanizeの両方で問題が発生しているところでは、各ロビイストに関連付けられている[View Lobbyist]リンクをクリックしようとしています。
Seleniumを使用すると、最初のリンクをクリックした後、「selenium.common.exceptions.NoSuchElementException」で失敗します。メッセージ:要素がありません:要素「{"method": "id"、 "selector" : "ctl00_ContentPlaceHolder1_Results_ctl03_lnkView"} "メッセージ。各「ビューロビイスト」リンクはhrefのではなく、形であるため、
、機械化の任意br.submitを使用して()が失敗しました。
ここセレンコードの簡単なバージョンです:ここにコードを機械使用
def __init__(self):
self.url = "http://media.ethics.ga.gov/search/Lobbyist/Lobbyist_ByName.aspx"
self.br = mechanize.Browser()
self.br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
def scrape_lobbyists(self, letter):
urlstr = "http://media.ethics.ga.gov/search/Lobbyist/Lobbyist_results.aspx?Year=2016&LastName="+letter+"&FirstName=&City=&FilerID="
driver.get(urlstr)
soup = BS(driver.page_source)
table = soup.find("table", { "id" : "ctl00_ContentPlaceHolder1_Results" }) # Need to add error check here...
if table is None: # No lobbyist with last name starting with 'X' :-)
return
records = table.find_all('tr') # List of all results for this letter
for row in records:
rec_print = ""
span = row.find_all('span', 'lblentry', 'value')
for sname in span:
stext = sname.get_text()
if ',' in stext:
continue
rec_print = rec_print + stext + "," # Create comma-delimited output
print(rec_print[:-1]) # Strip final comma
lnks = row.find_all('a', 'lblentrylink')
for lnk in lnks:
if lnk is None: # For some reason, first record is blank.
continue
newlnk = lnk['id'] # OK, this is the new URL
newstr = lnk['href']
newctl = newstr[+25:-5] # Matching placeholder (strip javascript....)
print("Lnk: ", lnk)
print("NewLnk: ", newlnk) # Just look at various elements
print("LnkStr: ", newstr)
print("LnkCtl: ", newctl)
driver.find_element_by_id(newlnk).click() # newlnk seems to be the right one...
:
br.open(」http://media.ethics.ga.gov/search/Lobbyist/Lobbyist_results.aspx?&Year=2016&LastName= "+文字+" &姓= &市= & FilerID =が、 ") スープ= BS(br.response()。read())
table = soup.find("table", { "id" : "ctl00_ContentPlaceHolder1_Results" }) # Need to add error check here...
if table is None: # No lobbyist with last name starting with 'X' :-)
continue
records = table.find_all('tr') # List of all results for this letter
for form in br.forms():
print "Form name:", form.name
print form
for row in records:
rec_print = ""
span = row.find_all('span', 'lblentry', 'value')
for sname in span:
if ',' in sname.get_text(): # They actually have a field named 'comma'!!
continue
rec_print = rec_print + sname.get_text() + "," # Create comma-delimited output
print(rec_print[:-1]) # Strip final comma
lnk = row.find('a', 'lblentrylink')
if lnk is None: # For some reason, first record is blank.
continue
print("Lnk: ", lnk)
newlnk = lnk['id']
print("NEWLNK: ", newlnk)
newstr = lnk['href']
newctl = newstr[+25:-5] # Matching placeholder (strip javascript....)
br.select_form('aspnetForm') # Tried (nr=0) also...
print("NEWCTL: ", newctl)
br[__EVENTTARGET] = newctl
response = br.submit(name=newlnk).read()
とにかく、困っていますので、どんな指導も頂けます!
うわー、ロビイストの名前を収集し、「プロファイル」リンクを辿っとファイラIDを取得し、プロセスを繰り返すために戻って行く - ここ
は実装です! pprintは私のLinuxシステム上で動作しないようですが、これは私が望んでいたものとまったく同じです。私は必要なものをつかむためにいくつかのコードを追加し始めますが、ちょうどくそ! - ありがとう! –もう一度ありがとう!あなたのコードは完璧に動作しており、A-ZループとBamでラップしただけです!完璧。あなたが見たものに基づいて、これも純粋に機械化の中で行うことができますか?私は機械化がはるかに優れていることを知っています。 –
@GerryGilmore nice!うまくいきました。トピックを解決するための答えを受け入れることができるかどうかを確認してください。ありがとう。 – alecxe