抓取输入来自文本框的网页
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">`
如何将此收据号码信息传递给 urllib2
或 scrapy
或任何其他方法。收据编号的示例是 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
我想抓取这个网站: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">`
如何将此收据号码信息传递给 urllib2
或 scrapy
或任何其他方法。收据编号的示例是 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