【问题标题】:How to scrape aspx pages with python如何用python抓取aspx页面
【发布时间】:2016-11-27 13:13:19
【问题描述】:

我正在尝试抓取一个站点,https://www.searchiqs.com/nybro/(您必须单击“以访客身份登录”才能进入搜索表单。如果我搜索诸如“安德鲁”之类的第 1 方术语,则结果有分页而且,请求类型是 POST,所以 URL 不会改变,会话也会很快超时。如此之快,如果我等待十分钟并刷新搜索 url 页面,它会给我一个超时错误。

我最近开始使用爬虫,所以我大部分时间都在做 GET 帖子,在那里我可以破译 URL。到目前为止,我已经意识到我将不得不查看 DOM。使用 Chrome 工具,我找到了标题。从网络选项卡中,我还发现了以下作为从搜索页面传递到结果页面的表单数据

__EVENTTARGET:
__EVENTARGUMENT:
__LASTFOCUS:
__VIEWSTATE:/wEPaA8FDzhkM2IyZjUwNzg...(i have truncated this for length)
__VIEWSTATEGENERATOR:F92D01D0
__EVENTVALIDATION:/wEdAJ8BsTLFDUkTVU3pxZz92BxwMddqUSAXqb... (i have truncated this for length)
BrowserWidth:1243
BrowserHeight:705
ctl00$ContentPlaceHolder1$scrollPos:0
ctl00$ContentPlaceHolder1$txtName:david
ctl00$ContentPlaceHolder1$chkIgnorePartyType:on
ctl00$ContentPlaceHolder1$txtFromDate:
ctl00$ContentPlaceHolder1$txtThruDate:
ctl00$ContentPlaceHolder1$cboDocGroup:(ALL)
ctl00$ContentPlaceHolder1$cboDocType:(ALL)
ctl00$ContentPlaceHolder1$cboTown:(ALL)
ctl00$ContentPlaceHolder1$txtPinNum:
ctl00$ContentPlaceHolder1$txtBook:
ctl00$ContentPlaceHolder1$txtPage:
ctl00$ContentPlaceHolder1$txtUDFNum:
ctl00$ContentPlaceHolder1$txtCaseNum:
ctl00$ContentPlaceHolder1$cmdSearch:Search

所有大写字母都是隐藏的。我还设法弄清楚了结果结构。

到目前为止,我的脚本真的很可悲,因为我对下一步该做什么完全一无所知。我仍然要做表单提交,分析分页并抓取结果,但我完全不知道如何继续。

import re
import urlparse
import mechanize

from bs4 import BeautifulSoup

class DocumentFinderScraper(object):
    def __init__(self):
        self.url = "https://www.searchiqs.com/nybro/SearchResultsMP.aspx"
        self.br = mechanize.Browser()
        self.br.addheaders = [('User-agent', 
                               'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7')]

##TO DO

    ##submit form

    #get return URL

    #scrape results

    #analyze pagination


if __name__ == '__main__':
    scraper = DocumentFinderScraper()
    scraper.scrape()

任何帮助将不胜感激

【问题讨论】:

  • 发送 POST 或 GET 比真正提交表单更容易。分页可以通过找到下一个按钮并单击它直到找不到为止。
  • 您也可以尝试将其添加到您的 Python 脚本中:logger = logging.getLogger("mechanize") logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.INFO)。可以在此处的调试部分找到:wwwsearch.sourceforge.net/mechanize ...(顺便说一句,它是三行 - 无法在评论中正确格式化)。

标签: python web-scraping beautifulsoup python-requests mechanize


【解决方案1】:

我禁用了 Javascript 并访问了 https://www.searchiqs.com/nybro/,表单如下所示:

如您所见,登录以访客身份登录按钮被禁用。这将使 Mechanize 无法工作,因为它无法处理 Javascript,您将无法提交表单。

对于这类问题,你可以使用 Selenium,它会模拟一个完整的浏览器,缺点是比 Mechanize 慢。

这段代码应该让你使用 Selenium 登录:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

usr = ""
pwd = ""

driver = webdriver.Firefox() 
driver.get("https://www.searchiqs.com/nybro/")
assert "IQS" in driver.title
elem = driver.find_element_by_id("txtUserID")
elem.send_keys(usr)
elem = driver.find_element_by_id("txtPassword")
elem.send_keys(pwd)
elem.send_keys(Keys.RETURN)

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2013-12-04
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多