我想抓取此网站: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">`
如何将此收据编号信息传递到urllib2
或scrapy
或任何其他方法。收据编号的示例是EAC1590674053
。
任何指针都非常感激。
答案 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