Python使用lxml模块抓取数据

目录

业务需求

需求分析

代码部分

结果分析

总结思路


业务需求

        抽取某网站的简历数据进行保存,批量抓取每个简历的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方法抓取不到标题,就往前面的数据集进行抓取。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值