Scrapy爬取拉鉤網的爬蟲(爬取整站CrawlSpider)
阿新 • • 發佈:2019-02-17
經過我的測試,拉鉤網是一個不能直接進行爬取的網站,由於我的上一個網站是扒的介面,所以這次我使用的是scrapy的整站爬取,貼上當時的程式碼(程式碼是我買的視訊裡面的,但是當時是不需要登陸就可以爬取的):
class LagouSpider(CrawlSpider): name = 'lagou' allowed_domains = ['www.lagou.com'] start_urls = ['https://www.lagou.com'] rules = ( Rule(LinkExtractor(allow=("zhaopin/.*",)), follow=True), Rule(LinkExtractor(allow=("gongsi/j\d+.html",)), follow=True), Rule(LinkExtractor(allow=r'jobs/\d+.html'), callback='parse_job', follow=True), ) def parse_job(self, response): #解析拉勾網的職位 item_loader = LagouJobItemLoader(item=LagouJobItem(), response=response) item_loader.add_css("title", ".job-name::attr(title)") item_loader.add_value("url", response.url) item_loader.add_value("url_object_id", get_md5(response.url)) item_loader.add_css("salary", ".job_request .salary::text") item_loader.add_xpath("job_city", "//*[@class='job_request']/p/span[2]/text()") item_loader.add_xpath("work_years", "//*[@class='job_request']/p/span[3]/text()") item_loader.add_xpath("degree_need", "//*[@class='job_request']/p/span[4]/text()") item_loader.add_xpath("job_type", "//*[@class='job_request']/p/span[5]/text()") item_loader.add_css("tags", '.position-label li::text') item_loader.add_css("publish_time", ".publish_time::text") item_loader.add_css("job_advantage", ".job-advantage p::text") item_loader.add_css("job_desc", ".job_bt div") item_loader.add_css("job_addr", ".work_addr") item_loader.add_css("company_name", "#job_company dt a img::attr(alt)") item_loader.add_css("company_url", "#job_company dt a::attr(href)") item_loader.add_value("crawl_time", datetime.now()) job_item = item_loader.load_item() return job_item
加上item和管道檔案的修改直接使用後發現,直接給我來了一個302重定向,看到重定向到的頁面是登陸的頁面,也就是說拉鉤網進行了cookie的驗證,如果cookie不合法或者沒有帶,直接給你重定向到登陸頁面,所以在爬取之前要進行的是登陸操作,獲得cookie值,將cookie值帶過去,經過的測試這樣是可以使用的,下面貼上登陸的程式碼:
def start_requests(self): browser = webdriver.Chrome(executable_path="/home/wqh/下載/chromedriver") browser.get(self.login_url) browser.find_element_by_css_selector("div:nth-child(2) > form > div:nth-child(1) > input").send_keys( "136XXXXXXX") browser.find_element_by_css_selector("div:nth-child(2) > form > div:nth-child(2) > input").send_keys( "wqhXXXXX") browser.find_element_by_css_selector( "div:nth-child(2) > form > div.input_item.btn_group.clearfix > input").click() import time time.sleep(10) cookies = browser.get_cookies() cookie_dict = {} for cookie in cookies: cookie_dict[cookie['name']] = cookie['value'] with open('cookies_dict.lagou', 'wb') as wf: pickle.dump(cookie_dict, wf) logging.info('--------lagou cookies---------') print(cookie_dict) return [scrapy.Request(self.start_urls[0], cookies=cookie_dict)]
其中需要自己下載webdriver chrome版本,並將我的路徑改成自己的路徑 ,使用者名稱和密碼改成自己的就可以了,因為整站的爬蟲是從start_requests函式開始的,所以重寫這個函式,使得這個請求帶上cookie值就可以了。