利用scrapy批量下載個人簡歷

1、前言

寫這個程序和博客的原因,純粹是出於無聊。上課老師不准我們帶耳機,所以就看不了視頻,學不了新知識。

所以,正想着馬上畢業了,正好也需要個人簡歷來參加面試,我呢,又不想自己去下載,就只有寫個程序來搞他了。

2、前景準備

2.1、工具

pycharm2020.1.1

python3.7

chrome

2.2、用到的工具庫

scrapy,requests,os

2.3、實現思路

既然是批量下載,那麼就需要每個網頁的所有簡歷的url,我們就可以使用scrapy的yield推送網址解析。

3、步驟實現

3.1、分析網頁源碼

首先我們打開我們需要爬的網址:個人簡歷網

當然,這個網址裏面的簡歷模板都是免費的。

然後,熟悉的打開我們的審查工具。瞅瞅我們需要的網址。我這兒用到的工具還有個xpath helper。能夠在網頁上運行xpath的工具。當然你們也可以不用下載,可以直接手寫。

在這裏插入圖片描述

可以很清楚的看到,我們所有的列表都在這裏面。

所以我們寫xpath語法的時候就只需要獲取ul下的li標籤就行。

但是,我們是爬取全部的網頁。所以就需要分析下一頁。我們再審查一下元素

在這裏插入圖片描述
我們要是想要跳轉下一頁,也就是說需要去訪問這個href標籤的元素就能跳轉到下一頁了。

所以,開始敲代碼。

3.2、源碼分析

我們說過,要下載每一個簡歷,也就是需要去訪問這個簡歷的網址。我們隨便打開一個簡歷看看裏面的構造。
在這裏插入圖片描述

我們可以很清楚的看到,這個下載按鈕綁定的是一個href超鏈接,並且超鏈接裏面的後綴是docx結尾的。

換句話說,我們直接去點擊超鏈接就能直接下載下來。

3.3、代碼實現

首先還是新建一個scrapy項目

scrapy startproject grjl
cd grjl
scrapy genspider gerenmuban http://www.gerenjianli.com/moban/

然後開始我們的代碼

寫之前還是要先配置一下settings.py


BOT_NAME = 'grjl'
SPIDER_MODULES = ['grjl.spiders']
NEWSPIDER_MODULE = 'grjl.spiders'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
    'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
}

因爲下載文件的方式使用的requests請求,而不是文件管道,所以,這兒就不用配置pipelines.py文件

直接上源碼吧

# -*- coding: utf-8 -*-
import scrapy
import requests
import os
class GerenmubanSpider(scrapy.Spider):
    name = 'gerenmuban'
    allowed_domains = ['http://www.gerenjianli.com/moban/']
    start_urls = ['http://www.gerenjianli.com/moban/']
    def parse(self, response):
        all_hrefs = response.xpath("//ul[@class='prlist']//li//a/@href").getall()
        for url in all_hrefs:
            yield scrapy.Request(url,callback=self.parse_download,dont_filter=True)
        next_page = response.xpath("//div[@class='Listpage']/a[last()-1]/@href").get()
        if next_page:
            yield scrapy.Request(next_page,callback=self.parse,dont_filter=True)
    def parse_download(self,response):
        download_url = response.xpath("//div[@class='donwurl2']/a/@href").get()
        yield scrapy.Request(download_url,callback=self.download,dont_filter=True)
    def download(self,response):
        name = str(response).split("_")[-1].replace(">","")
        url = str(response).split()[-1].replace(">","")
        docx = requests.get(url).content
        save_path = r"E:\PythonLearn\ReptileDemo\scrapyDemo\grjl\save_docx"
        folder = os.path.exists(save_path)
        if not folder:
            os.mkdir(save_path)
        with open(save_path+"\\"+name,"wb") as file:
            file.write(docx)

最後新建一個main文件去啓動這個scrapy

from scrapy.cmdline import execute
execute("scrapy crawl gerenmuban".split())

運行效果:在這裏插入圖片描述

在這裏插入圖片描述

我們隨便打開一個看看:

在這裏插入圖片描述

ok,就這樣完事兒了。

爬蟲純屬愛好,不做任何違法請求。

謝謝觀看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章