如何使用 scrapy 抓取 asp 网络表单 link

how to crawl asp webform link using scrapy

我想抓取一个网络表单网站,但 link 不是常规的 href,它们如下所示: 我想让 scrapy 得到 link 然后去那里

< a id="ctl00_ContentPlaceHolder1_DtGrdAttraf_ctl06_LnkBtnDisplayHadith" title="some title" class="Txt" onmouseover="changeStyle(this, 'lnk')" onmouseout="changeStyle(这个,'Txt TxtSmall')" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$DtGrdAttraf$ctl06$LnkBtnDisplayHadith", "", false, "" , "http://www.sonnaonline.com/DisplayResults.aspx?Menu=1&ParentID=13&Flag=dbID&Selid=8483", false, true))">link 文本

Asp.net 是一个表单驱动的框架。所以,您必须填写表格并手动 post 它才能到达页面导向?

怎么做?

首先,你可以看这里,我的scrapy代码。 https://github.com/Timezone-design/python-scrapy-asp-net/blob/master/scrapy_spider/spiders/burzarada_spider.py

您应该首先找出 WebForm_DoPostBackWithOptions() 在页面中的作用。 Ctrl+U 直接在页面源码中搜索即可。

你很快就会知道它是做什么的,它把这些信息填在哪里"ctl00$ContentPlaceHolder1$DtGrdAttraf$ctl06$LnkBtnDisplayHadith", "", false, "", "http://www.sonnaonline.com/DisplayResults.aspx?Menu=1&ParentID=13&Flag=dbID&Selid=8483", false, true

那么,事情就清楚了。

你通过

将a标签的href提取为字符串
response.css('... a ::attr(href)').extract()[0].href # assuming there are many <a>s there

然后将字符串"ctl00$ContentPlaceHolder1$DtGrdAttraf$ctl06$LnkBtnDisplayHadith", "", false, "", "http://www.sonnaonline.com/DisplayResults.aspx?Menu=1&ParentID=13&Flag=dbID&Selid=8483", false, true用逗号分割,填入适当的输入元素,post用scrapy.FormRequest.

yield scrapy.FormRequest( 

    'https://burzarada.hzz.hr/Posloprimac_RadnaMjesta.aspx', 

    formdata = { 
        '__EVENTTARGET': eventTarget, 
        '__EVENTARGUMENT': eventArgument, 
        '__LASTFOCUS': lastFocus, 
        '__VIEWSTATE': viewState, 
        '__VIEWSTATEGENERATOR': viewStateGenerator,
        '__VIEWSTATEENCRYPTED': viewStateEncrypted,
        'ctl00$MainContent$ddlPageSize': pageSize,
        'ctl00$MainContent$ddlSort': sort,
    },

    callback=self.parse_multiple_pages 
    )

解释:

https://burzarada.hzz.hr/Posloprimac_RadnaMjesta.aspx # url to post the form.
formdata # form data as json. keys are input names.
callback # function to get the response and do next things.

中提琴!您可以进入页面,响应可以作为回调函数中的参数获得。

您可以在上面的 link 中看到一些示例。