Привет всем, я довольно новичок в программировании, поэтому дайте мне знать, если мне не хватает какой-либо важной информации.
В настоящее время я работаю над утилизацией для очистки этого веб-сайта , но у меня возникают проблемы с разбиением на страницы, поскольку он использует _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(),
}
Любой совет будет с благодарностью, спасибо!