抓取输入来自文本框的网页

Crawl a webpage where the input come from a textbox

我想抓取这个网站:https://egov.uscis.gov/casestatus/landing.do

我的目标是编写一个 python 脚本,在输入收据编号后,一旦此网页上的状态发生变化,它就会提醒我。

我以前从未这样做过,但在这里阅读了一些内容:一些人推荐了 urllib2,另一些人推荐了 scrapy。我对它的工作原理有非常非常基本的了解。

但这是我的问题:

当我输入收据号码时,提交后网页的url没有改变。查看源代码页面,我看到您需要输入收据编号的地方:

<input id="receipt_number" name="appReceiptNum" class="form-control textbox  initial-focus" maxlength="13" type="text">`

如何将此收据号码信息传递给 urllib2scrapy 或任何其他方法。收据编号的示例是 EAC1590674053.

非常感谢任何指点。

该网站使用 Form。所以你需要制作scrapy来填写字段并提交表格。我已经编译了一些代码来展示如何使用 scrapy:

import scrapy

class TestSpider(scrapy.Spider):

    name = 'casestatus'
    start_urls = ['https://egov.uscis.gov/casestatus/landing.do']

    def parse(self, response):

        request = scrapy.FormRequest.from_response(
            response,
            formname='caseStatusForm',
            formdata={'appReceiptNum': 'EAC1590674053'},
            callback=self.parse_caseStatus
        )
        print request.body
        yield request

    def parse_caseStatus(self,response):
        sel_current_status = response.xpath('//div[contains(@class,"current-status")]')
        if sel_current_status:
            txt_current_status = sel_current_status.xpath('./text()').extract()
            txt_current_status = " ".join(map(unicode.strip,txt_current_status))
            print txt_current_status
        else:
            print 'NO STATUS FOUND'

# YIELDS THE FOLLOWING OUTPUT FOR ME:
# [casestatus] DEBUG: Crawled (200) <POST https://egov.uscis.gov/casestatus/mycasestatus.do;jsessionid=A19A03FC933A208A2DDF89D98BE9F32E> (referer: https://egov.uscis.gov/casestatus/landing.do)
# Case Rejected Because I Sent An Incorrect Fee