利用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,就这样完事儿了。

爬虫纯属爱好,不做任何违法请求。

谢谢观看。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="ResumeDB" connectionString="Data Source=192.168.1.240;Initial Catalog=ResumeImport;User ID=ResumeImport;Password=ResumeImport2012" providerName="System.Data.SqlClient" /> <!--<add name="ResumeDB" connectionString="Server=DEV2-PC\RICHARD;Database=Resume;Trusted_Connection=True;" />--> </connectionStrings> <appSettings> <!--导入数据源 DB表示是去数据库取数 Directory表示直接从文件夹下导入 Excel表示数据源为Excel--> <add key="ImportSource" value="Directory"/> <!--<add key="UserName" value="baza_TZDZ"/> <add key="PWD" value="12a6eafd1a616e11ce51e419ab1435"/>--> <add key="UserName" value="baza_SZSQHD"/> <add key="PWD" value="52f6eafd9a616e94cd10e419db7818"/> <!--文件大小限制 单位KB--> <add key="LimitSize" value="2000"/> <!--支持上传的文件类型--> <!--<add key="PermitImportFileExtension" value="doc,pdf,txt,html,htm"/>--> <add key="PermitImportFileExtension" value="doc,pdf,txt,html,htm,mht"/> <!--简历的渠道 1:招聘网站,2:猎头招聘,3:员工推荐,4:现场招聘,5:校园招聘,6:媒体广告,7:官网,8:企业人才库,9:其它, 10131:领导推荐,10132:外包,10133:培训机构,10254:职酷 如果不填或填0,则默认使用企业人才库--> <add key="Channel" value="0"/> <!--以下是数据源为Directory的参数 begin--> <add key="FileDirectory" value="F:\中国人才热线下载简历"/> <add key="CurrentlyFilePath" value=""/> <!--以上是数据源为Directory的参数 end--> <!--编码格式 int型 65001为UTF-8 936为默认--> <add key="CodePage" value="936"/> <!--以下是数据源为DB的参数 begin--> <add key="ServiceAddress" value=""/> <add key="TempDirectory" value="d:\ResumeTemp"/> <add key="FileStartID" value="0"/> <add key="FileIDName" value="ReportID"/> <add key="FileDataName" value="WordContent"/> <add key="FileTypeName" value="docname"/> <add key="GetResumeSql" value="select top 50 {0},WordContent,docname from ResumeDocReportTable where {0} > {1} order by {0} "/> <add key="WaitTime" value="10"/> <!--是否保存文件,0表示不保存,1表示保存导入错误的文件,2都保存--> <add key="SaveFile" value="1"/> <add key="FileExtension" value="doc"/> <!--以上是数据源为DB的参数 end--> <!--以下是数据源为Excel的参数 begin--> <add key="ExcelFileDirectory" value="C:\Documents and Settings\kiki\桌面\简历导入工具"/> <add key="ExcelToTxtTemplate" value="C:\Documents and Settings\kiki\桌面\简历导入工具\Template\ExcelToTxtTemplate.txt"/> <add key="ExcelRowKey" value="姓名"/> <add key="ExistKeyCount" value="3"/> <add key="CurrentlyExcelFilePath" value=""/> <!--以上是数据源为Excel的参数 end--> </appSettings> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IResumeImport" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="6553600" maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="3200" maxStringContentLength="819200" maxArrayLength="1638400" maxBytesPerRead="409600" maxNameTableCharCount="1638400" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://115.29.222.109:8008/Baza.Hirede.Services.ResumeImport.ResumeImportService.svc/ResumeImport" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IResumeImport" contract="ResumeImportService.IResumeImport" name="BasicHttpBinding_IResumeImport" /> </client> </system.serviceModel> </configuration> <!--http://weixun.hirede.com/Baza.Hirede.Services.ResumeImport.ResumeImportService.svc/ResumeImport--> <!--http://localhost:8410/ResumeImport--> <!--http://resumeimport.hirede.com/Baza.Hirede.Services.ResumeImport.ResumeImportService.svc-->
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼小洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值