Advertisement

Scrapy爬取拉钩网的爬虫(爬取整站CrawlSpider)

阅读量:

经过我的测试,拉钩网是一个不能直接进行爬取的网站,由于我的上一个网站是扒的接口,所以这次我使用的是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值就可以了。

更多的详情代码请访问我的github地址

全部评论 (0)

还没有任何评论哟~