Scrapy asp.net нумерация страниц - PullRequest
1 голос
/ 17 марта 2019

Привет всем, я довольно новичок в программировании, поэтому дайте мне знать, если мне не хватает какой-либо важной информации.

В настоящее время я работаю над утилизацией для очистки этого веб-сайта , но у меня возникают проблемы с разбиением на страницы, поскольку он использует _doPostBack

HREF = "JavaScript: __ doPostBack ( 'ctl00 $ cpContent $ rg_MemberList $ ctl00 $ ctl02 $ ctl00 $ CTL 05 ', '')"

Текст, выделенный жирным шрифтом, - это, по сути, единственное, что увеличивается с шагом 2, и прямо сейчас я могу получить поиск для поиска до 11-й страницы, которая

ctl00 $ cpContent $ rg_MemberList $ ctl00 $ ctl02 $ ctl00 $ CTL 25

Однако, кажется, что Scrapy не может попасть на страницу 12, и после проверки элементов в Chrome я заметил, что __EVENTTARGET на странице 12 возвращается к

ctl00 $ cpContent $ rg_MemberList $ ctl00 $ ctl02 $ ctl00 $ CTL 09

Поэтому я попытался добавить __EVENTTARGET, __EVENTARGUMENT, __VIEWSTATE и __EVENTVALIDATION в качестве форм-данных, но он все еще не работает.

class FmmSpider(scrapy.Spider):
name = 'FMM'
url = 'http://www.fmm.org.my/Member_List.aspx'



def start_requests(self):
    yield scrapy.Request(url=self.url, callback=self.parse_form)

def parse_form(self, response):
    selector = scrapy.Selector(response=response)
    VIEWSTATE = selector.xpath('//*[@id="__VIEWSTATE"]/@value').extract_first()
    EVENTVALIDATION = selector.xpath('//*[@id="__EVENTVALIDATION"]/@value').extract_first()

    for page_number in range(50):
        formdata = {
      # change pages here
        "__EVENTTARGET": "ctl00$cpContent$rg_MemberList$ctl00$ctl02$ctl00$ctl{page_number:02d}".format(page_number=page_number),
        "__EVENTARGUMENT": "",
        "__VIEWSTATE": VIEWSTATE,
        "__EVENTVALIDATION": EVENTVALIDATION,
        }
        yield scrapy.FormRequest(url=self.url, formdata=formdata, callback=self.parse_list)


def parse_list(self, response):
    urls = response.css('table.memberSearchTable > tr > td > div > a::attr(href)').extract()
    for url in urls:
        url = response.urljoin(url)
        yield scrapy.Request(url=url, callback=self.parse_details)


def parse_details(self,response):
    yield {
        'company_name': response.css('span#ctl00_cpContent_lbl_CompanyName::text').extract_first(),
        'website': response.css('td > span#ctl00_cpContent_lbl_Website > a::text').extract_first(),
        'email': response.css('td > span#ctl00_cpContent_lbl_Email > a::text').extract_first(),
        'telephone': response.css('span#ctl00_cpContent_lbl_Tel::text').extract_first(),
        'business_enquiry': response.css('span#ctl00_cpContent_lbl_BuisnessEnquiry::text').extract_first(),
        'brand_names': response.css('span#ctl00_cpContent_lbl_Brand::text').extract_first(),
        'products_services': response.css('span#ctl00_cpContent_lbl_Product::text').extract_first(),
    }

Любой совет будет с благодарностью, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...