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)
还没有任何评论哟~
