#python #web-scraping #scrapy
#python #веб-очистка #scrapy
Вопрос:
Вот полный код, при запуске кода возникает ошибка «Crawled (403)«. Если я обойду ошибку HTTP, используя HTTPERROR_ALLOWED_CODES =[403] в setting.py , затем код начнет работать.
Но мне нужно решение для входа на сайт.
import scrapy
from urllib.parse import urljoin
from scrapy.http import Request,FormRequest
class MoorSpider(scrapy.Spider):
name = 'moor'
allowed_domains = ['glassdoor.com']
start_urls = ['https://www.glassdoor.com/profile/login_input.htm']
page_number = 2
def parse(self,response):
token = response.xpath('.//*[@name="gdToken"]/@value').extract()
# print(token)
yield FormRequest('https://www.glassdoor.com/profile/ajax/loginSecureAjax.htm', formdata={'username':'likej41679@94jo.com','password':'1a2b3c4d','gdToken':token}, callback=self.startscraper)
def startscraper(self,response):
yield Request('https://www.glassdoor.com/Explore/browse-companies.htm?overall_rating_low=3.5amp;page=1amp;isHiringSurge=0amp;locId=1282amp;locType=Samp;locName=North Carolina, US, US', callback=self.startscraper1)
def startscraper1(self,response):
urls = response.css('.col-12.my-0.mt-sm.mt-sm-std.order-5 a::attr(href)').extract()
# print(next_page)
for url in urls:
url1 = urljoin('https://www.glassdoor.com/', url)
yield Request(url1, callback=self.DetailPage)
# next_page = 'https://www.glassdoor.com/Explore/browse-companies.htm?overall_rating_low=3.5amp;page=' str(MoorSpider.page_number) 'amp;isHiringSurge=0amp;locId=1282amp;locType=Samp;locName=North Carolina, US, US'
next_page = 'https://www.glassdoor.com/Explore/browse-companies.htm?overall_rating_low=3.5amp;page=' str(
MoorSpider.page_number) 'amp;isHiringSurge=0amp;locId=1282amp;locType=Samp;locName=North Carolina, US, US'
if MoorSpider.page_number <= 2:
MoorSpider.page_number = 1
yield response.follow(next_page, callback=self.startscraper1)
def DetailPage(self,response):
Company_Website=response.css('[data-test="employer-website"]::text').get()
Company_Revenue = response.css('[data-test="employer-revenue"]::text').get()
Company_Description = response.css('span[data-test="employerDescription"]::text').get()
Company_Mission = response.css('span[data-test="employerMission"]::text').get()
yield {
'Company_Website':Company_Website,
'Company_Revenue':Company_Revenue,
'Company_Description':Company_Description,
'Company_Mission':Company_Mission,
}
Ответ №1:
Замените существующий parse
метод следующим, чтобы он работал. Оказывается, что ваша переменная token ничего не содержит, поскольку она генерируется динамически. Однако вы можете проанализировать значение gdToken
out из некоторого тега скрипта.
def parse(self,response):
token = response.css('body').re(r"gdToken":"(.*?)",")[0]
yield FormRequest('https://www.glassdoor.com/profile/ajax/loginSecureAjax.htm', formdata={'username':'likej41679@94jo.com','password':'1a2b3c4d','gdToken':token}, callback=self.startscraper)