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

时间:2015-08-20 21:15:02

标签: python-2.7 scrapy urllib2

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

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

我以前从未这样做过,但在这里做过一些阅读:有些人推荐urllib2和其他scrapy。我对这是如何工作有非常基本的了解。

但这是我的问题:

当我输入收据编号时,网页的网址在提交后不会更改。查看源页面,我看到您需要输入收据编号的位置:

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

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

任何指针都非常感激。

1 个答案:

答案 0 :(得分:0)

该网站使用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