【发布时间】: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