[英]Web Scraping w/Mechanize and/or BeautifulSoup4 on ASP pages
您好,我是一名編程n00b,並極力嘗試使某些代碼正常工作。 我真的找不到關於ASP刮取/填充字段並提交然后使用內容的任何優秀教程。
到目前為止,這是我的代碼:
import mechanize
import re
url = 'http://www.cic.gc.ca/english/work/iec/index.asp'
br = mechanize.Browser(factory=mechanize.RobustFactory())
br.set_handle_robots(False)
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')]
br.open(url)
response = br.response().read()
我正在嘗試做的是:
請告訴我以最少的編程經驗來做到這一點的最佳/最快方法。
一旦理解了為什么頁面加載后沒有顯示第二個表單,就沒有那么困難了。 與ASP本身無關,而是由於CSS樣式設置為“ display:none;”。 並且僅在第一個“選項選擇”已填滿后才有效。
這是在Selenium中實現的功能的完整示例,我相信它類似於機械化。
基本流程應為:
比較文本是否從上次獲取更改
a)如果是,請執行BEEP並關閉驅動程序頁面等。
b)如果否,請設置一個調度程序(我使用Python的Event的調度程序 ,然后再次運行抓取功能...
而已! 簡單,確定的代碼時間-我使用英國+工作假期對進行測試:
import selenium.webdriver
from selenium.webdriver.common.keys import Keys
import sched, time
driver = selenium.webdriver.Firefox()
url = 'http://www.cic.gc.ca/english/work/iec/index.asp'
driver.get(url)
html_content = ''
# construct a scheduler
s = sched.scheduler(time.time, time.sleep)
def crawl_me():
global html_content
driver.refresh()
time.sleep(5) # wait 5s for page to be loaded
country_name = driver.find_element_by_name('country-name')
country_name.send_keys('United Kingdom')
# trick's here to send a TAB key to trigger the change event
country_name.send_keys(Keys.TAB)
# make sure the second Option Select is active (none not in style)
assert "none" not in driver.find_element_by_id('category_dropdown').get_attribute('style')
cateogory_name = driver.find_element_by_name('category-name')
cateogory_name.send_keys('Working Holiday')
btn_go = driver.find_element_by_id('submit')
btn_go.send_keys(Keys.RETURN)
# again, check if the content has been loaded
assert "United Kingdom - Working Holiday" not in driver.page_source
compared_content = driver.find_element_by_id('stats').text
# here we will end this script if content has changed already
if html_content != '' and html_content != compared_content:
# do whatever you want to play the beep sound
# at the end exit the loop
driver.close()
exit(-1)
# if no changes are found, trigger the schedule_crawl() function, like recursively
html_content = compared_content
print html_content
return schedule_crawl()
def schedule_crawl():
# set your time interval here, 15*60 = 15 minutes
s.enter(15*60, 1, crawl_me, ())
s.run() # and run it of course
crawl_me()
坦白地說,這非常簡單明了,但是確實需要您完全了解html / css / javascript(在這種情況下不是javascript,但是您需要了解基本知識)及其所有元素如何協同工作。
您確實需要從基本的閱讀中學習=>摘要=>代碼=>經驗=>循序漸進, 編程沒有捷徑或最快的方法。
希望這會有所幫助(我真的希望您不僅要復制並粘貼我的知識,而且還要通過機械化的方式學習和實現自己的知識)。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.