目录
业务需求
抽取某网站的简历数据进行保存,批量抓取每个简历的rar包。
需求分析
先分析抓取的网站的url地址,分析每个url地址栏上面都有简历模板的url,先抓取到跳转的地址,在从跳转的地址中抽取每个简历详细页中下载地址,再用get方法进行抓取rar的简历包,进行本地化存储。
代码部分
# -*- coding:UTF-8 -*-
#需求爬取简历网站rar文档进行下载。
import requests
from lxml import etree
#输入一个空列表,将要爬取的网站url放入列表中
urls = []
#循环5次,每次间隔1
for i in range(1,5,1):
#从第二个url的地址上面抓取数据,因为
i = i + 1
#优化列表参数,将start后面的变量设置为I,进行变量格式化
url = "https://sc.chinaz.com/jianli/free_{}.html".format(i)
#将赋值的url赋值到urls列表中。
urls.append(url)
#请求的浏览器标识符
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
#设置一个空列表,抽取的网站的详情页url放置进去
detail_urls = []
#设置一个空列表,把抽取到标题数字准备放入
jianli_name_list = []
#遍历从简历的主页抓取每个url
for url in urls:
#get方法抓取网页的源码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
#get方法抓取每个网页的内容
response = requests.get(url,headers=headers)
#使用content方法加utf8保留下来
content = response.content.decode('utf8')
#etree的html方法赋予对象
html = etree.HTML(content)
#
for i in (0,10,1):
#利用xpath标签路径方法,抓取详细的简历详细url标签页到列表中
detail_url = html.xpath('// * [ @ id = "container"]/div[{}]/a/@href'.format(i+1))
#使用xpath标签,抓取简历的标题
jianli_get_name = html.xpath('//*[@id="container"]/div[{}]/p/a/text()'.format(i+1))
jianli_name_list.append(jianli_get_name)
detail_urls.append(detail_url)
# print("抓取存储简历名字",jianli_name_list)
# print("抓取到存储简历的url列表", detail_urls)
#设置一个空列表,准备存放电影数据
jianli_download_url = []
for page in detail_urls:
for url in page:
response = requests.get(url,headers=headers)
content = response.content.decode('utf8')
# print(content)
html = etree.HTML(content)
new_url = html.xpath('// *[ @ id = "down"] / div[2] / ul / li[1] / a/@href')#//*[@id="down"]/div[2]/ul/li[1]/a
jianli_download_url.append(new_url)
#打印下载地址
# print('名称与简历下载地址:',jianli_download_url)
#列表有嵌套,第一次抽取
for r1 in jianli_download_url:
#第二次抽取列表出来地址是正确地址
for r2 in r1:
rar_pake = requests.get(url=r2, headers=headers).content
rar_name = r2.split('/')[-1]
#本地化存储数据
rar_Path = './rar_file/' + rar_name
with open(rar_Path,'wb') as code:
code.write(rar_pake)
print(rar_Path,'执行下载完毕!!!')
结果分析
运行结果正常,每个数据包进行下载。
文件夹中有文件下载存入了。
总结思路
本实验最大的难点是抓取每个简历的url,并且将每个简历的rar进行本地化保存。抓取每个简历使用for循环进行遍历抓取了,刚开始抓取不到地址,后面用chrome浏览器自带的xpath路径复制进行抓取,最终抓下来每个简历的详细地址了。最后是注意一点,使用for循环抓取的数据增加到列表中,形成双重列表,要在后面使用两次for循环进行‘http****’数据进行清洗,清洗完毕以后在用get方法进行抓取,用get方法抓取时候,注意url数据的格式有时候使用xpath方法抓取不到标题,就往前面的数据集进行抓取。