精华内容
下载资源
问答
  • 主要介绍了python实例:xpath爬虫实例,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术 1、首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构。每一组“li”对应一组套图。属性href后面即为套图的内页地址...

     案例一:

    某套图网站,套图以封面形式展现在页面,需要依次点击套图,点击广告盘链接,最后到达百度网盘展示页面。

    这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术

     

    1、首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构。每一组“li”对应一组套图。属性href后面即为套图的内页地址(即广告盘链接页)。所以,我们先得获取列表页内所有的内页地址(即广告盘链接页)

    代码如下:

    import requests   倒入requests库
    from lxml import etree   倒入lxml 库(没有这个库,pip install lxml安装)
    url = "https://www.xxxx.com/gc/"  请求地址
    response = requests.get(url= url)   返回结果
    wb_data = response.text   文本展示返回结果
    html = etree.HTML(wb_data)   将页面转换成文档树
    b = html.xpath('//ul[@class = "clearfix"]//@href')  这一步的意思是class“clearfix”下所有属性为“href”赋值给“b”,因为我们的目标内容都展示在class“clearfix”下,且在href属性后面
    print(b)   打印b,这里的b是一个数组
    print(b[0]) 打印b的第一项数据

    执行结果:成功返回所有内页

     

    2、打开内页(即广告盘链接页),获取广告盘地址。下图红色箭头,还不是真正的百度盘页,需要点击后才可以看的到百度盘的地址。所以这一步骤,只需要抓取红色箭头内容地址;

     

    代码如下:

    url = "https://www.xxxx.com/gc/toutiao/87098.html"
    response = requests.get(url= url)
    wb_data = response.text # 将页面转换成文档树
    html = etree.HTML(wb_data)
    b = html.xpath('//div[@class = "pictext"]//@href')
    c=b[1]      #需要注意的地方,class = "pictext"下有两个href,我们只需要第一个href的值,所以返回值再赋值给c且取第二项数据
    print(c)

    执行结果:成功返回所有内页

     

    3、获取到广告盘地址,接下来要打开该地址,抓百度盘真实地址。链接和提取码在两个不同的元素中,所有最后返回两组数据。

     

     

    代码如下:

    url = "http://xxx.la/xam9I6"
    response = requests.get(url= url)
    wb_data = response.text
    # 将页面转换成文档树
    html = etree.HTML(wb_data)
    b = html.xpath('//tr/td/text()')
    c=b[6]#提取码
    d = html.xpath('//tr//@href')#百度地址
    print(c)
    print(d)

    注意,这里html.xpath写法与上面有些区别,目标元素的上级没有class,只能模糊取值

    比如提取码的HTML结构如下图,结构为//tr/td/,单/代表父节点下的子节点,双/代表父节点后的子孙节点。提取码为tr的子节点。但是这个结构下有很多组数据,最后输出一个数组b(看上面代码b)。如此,我们找到提取码位于数组序列,赋值给c(看上面代码c),这样获得了真实的百度盘地址

    网盘地址则因为有href属性,所以好爬去一些,注意/的数量即可

     

    4、把以上步骤拼成一个脚本,这里就涉及到函数和函数之间的传参,还有循环的问题。代码直接贴出来

     

    # -*-coding:utf8-*-
    # encoding:utf-8
    
    import requests
    from lxml import etree
    import os
    import sys
    
    path = os.path.abspath(os.path.dirname(sys.argv[0]))
    
    firstlink = "https://www.xxx.com/gc/qt/xxx.html"
    AA=["https://www.xxx.com/gc/",
       "https://www.xxx.com/gc/index_2.html",
       "https://www.xxx.com/gc/index_3.html",
        "https://www.xxx.com/gq/",
        "https://www.xxx.com/gq/index_2.html",
        "https://www.xxx.com/gq/index_3.html",
        "https://www.xxx.com/gq/index_4.html"]
    
    #第1步,获取每一页所有的资源地址,地址格式“https://www.xxx.com/gq/mistar/mistar300.html”
    def stepa (AA):
        lit=[]
        for url in AA:
            response = requests.get(url=url)
            wb_data = response.text
            # 将页面转换成文档树
            html = etree.HTML(wb_data)
            a = html.xpath('//ul[@class = "clearfix"]//@href')
            lit.append(a)
        return(lit) 
    alllink = stepa(AA)
    
    #第2步,获取的地址,循环读取打开,从而获取百度网盘信息
    def stepb(alllink,firstlink):
        for list in alllink:
            for url in list:
                if url in firstlink:
                    continue
                elif "www" in url:
                    url2 = url
                else:
                    url2 ="https://www.xxx.com" +url
                response = requests.get(url=url2)
                wb_data = response.text # 将页面转换成文档树
                html = etree.HTML(wb_data)
                b = html.xpath('//div[@class = "pictext"]//@href')
                g = html.xpath('//div[@class = "pictext"]/text()')
                c = b[1]#地址(广告盘地址或者百度盘地址)地址格式“http://xxx.la/Tm1R2T“或者”https://pan.baidu.com/s/xxx-xxx-azplbTIQ“
                h = g[-1]
                i=h[14:18]#提取码(获取到的提取码打印出来的是乱码,如果获取到内容不正确,优先考虑是这里的问题)
                test3=c+i#把链接和提取码拼接成一条数据
     #下面的条件判断是解决获取链接不一致的问题,本来通过第一步骤获取的套图页,需要进一步点击广告页获取百度地址,有些资源不需要获取广告盘地址,点击后直接是百度地址
     # 所以做了判断,如果是百度地址,直接写入文档,如果是广告盘地址,则打开广告盘地址,再获取百度盘地址写入文档           
                if "pan.baidu.com" in c:
                    with open(path+'\\1.txt', 'a',encoding='utf-8') as w:
                        w.write('\n'+test3)
                        w.close()
                else:
                    #获取到广告页地址
                    url3 = c
                    response = requests.get(url=url3)
                    wb_data = response.text
                    # 将页面转换成文档树
                    html = etree.HTML(wb_data)
                    d = html.xpath('//tr/td/text()')
                    #print(d)
                    e=d[6]#获取提取码
                    f = html.xpath('//tr//@href')#获取地址
                    test = e[-5:]#提取码值只保留提取码(4位)
                    test2 = f[-1]#链接只保留链接内容,去掉前后['']
                    test3=test2+test#把链接和提取码拼接成一条数据
                    print(test3)
                    with open(path+'\\1.txt', 'a',encoding='utf-8') as w:
                        w.write('\n'+test3)
                        w.close()
    stepb(alllink,firstlink)
    
    #第3步:提示爬取完成
    def over():
        print("ok")
    over()   

     

     需要注意的地方:

    1、return的用法,如果想把函数生成的值传给后面的函数用,就需要返回这个值,如def stepa 里定义的a为爬去的套图封面地址(通过打开这个地址进行下一步),就需要return(a)返回a的值,否则执行后无数据

    2、Continue的应用,因为第一个套图地址打开的内容没有目标内容,这样找不到元素会报错,所以需要读取套图地址的时候要跳过第一个地址。加一个if判断,当第一个地址等于事先定义好的非正常地址的时候,跳过这个循环

     

    打印结果:

     

     

     案例二:

    爬取豆瓣的读书的评论

    分析html,评论存储放在标红色元素位置,且观察结构,其他评论都存储在li节点的相同位置

    所以,xpath的解析对象为//*[@id="comments"]//div[2]/p/span

    前面的实例讲过"//" 代表从当前节点选取子孙节点,这里就可以直接跳过li节点,直接选择li后的div[2]/p/span内容

    代码如下:

    # -*-coding:utf8-*-
    # encoding:utf-8
    
    import requests
    from lxml import etree
    
    firstlink = "https://book.douban.com/subject/30172069/comments/hot?p=6"
    
    def stepa (firstlink):
        response = requests.get(url=firstlink)
        wb_data = response.text
        html = etree.HTML(wb_data)
        a = html.xpath('//*[@id="comments"]//div[2]/p/span')
        print(a)
    stepa (firstlink)

    运行代码,打印出来的结果如下图,没有得到想要的评论内容

    后来发现,想要获取内容,必须以文本的形式输出,即xpath的解析对象为//*[@id="comments"]//div[2]/p/span/text()

    修改后的代码

     

    # -*-coding:utf8-*-
    # encoding:utf-8
    
    import requests
    from lxml import etree
    
    firstlink = "https://book.douban.com/subject/30172069/comments/hot?p=6"
    
    def stepa (firstlink):
        response = requests.get(url=firstlink)
        wb_data = response.text
        html = etree.HTML(wb_data)
        a = html.xpath('//*[@id="comments"]//div[2]/p/span/text()')
        print(a)
    stepa (firstlink)

    执行一下,内容来了

     

    参考地址:https://cuiqingcai.com/5545.html

    转载于:https://www.cnblogs.com/becks/p/11335493.html

    展开全文
  • 爬取豆瓣TOP250榜第一页的电影信息(xpath极简版) from lxml import etree import requests\nurl='https://movie.douban.com/top250' headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/...
  • 我是学了正则和bs4然后学的xpath,其实我开始并不想做笔记,但是发现自己学完了之后就全忘记了,特意做一下笔记。我着重讲实例。 求点赞、评论、关注!!!!!! 可以先看一下xpath的基本逻辑: #xpath解析原理...

    首先声明,自己算是小白,还是偏感性女性思维,刚接触python没有多久,所以以下文字中有不专业的地方,请多多指出,不吝赐教。我是学了正则和bs4然后学的xpath,其实我开始并不想做笔记,但是发现自己学完了之后就全忘记了,特意做一下笔记。我着重讲实例。

    求点赞、评论、关注!!!!!!

    可以先看一下xpath的基本逻辑:

    #xpath解析原理:
     -1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
     -2.调用etree对象的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

    #环境的安装
     -pip install lxml

    #如何实例化一个etree对象 :from lxml import etree
     -1.将本地的html文档中的源码数据加载到etree对象中:
    etree.parse(filePath)   
     -2.可以将从互联网上获取的源码数据加载到该对象中:
    etree.parse(filePath)

    #xpath表达式
     -/:表示从根节点开始定位,表示的是一个层级
     -//表示多个层级,可以表示从任意位置开始定位
    -属性定位://div[@class='song']  tag[@attrName='attrValue']  
    -索引定位://div[@class='song']/p[3] 索引是从1开始的
    -取文本:/text()   
    -取属性:/@attrName    ==>img/@src 

    1.第一个案例:爬取链家的二手房信息,要求能输出二手房页面的二手房标题和价钱

    --先导入模块,发起网络请求,得到这种二手房列表界面,然后把网页etree对象化,再调用xpath方法

    import requests
    from lxml import etree
    if __name__=='__main__':
    # 需求:爬取链家的二手房信息
    # 1.爬取页面源码数据
        url1='https://sh.lianjia.com/ershoufang/pudong/'
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                              'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}
        response=requests.get(url1,headers)
        lianjia_text=response.text

     --注意看xpath里面怎么写的,你看一下网页的源代码,会发现这些二手房的一套信息全都以li标签的形式存储,放在了ul的标签里面 。

     # 数据解析
        tree=etree.HTML(lianjia_text)
        print(lianjia_text)
        li_list=tree.xpath('//ul[@class="sellListContent"]/li') 这是一个列表,里面存放着所有的li标签

    --后面我们想获得二手房的名称,我们其实只需要在li标签里面找就可以了,先遍历这些li标签, 在li标签里再次调用这个xpath方法(老实说,其实我也不是很明白为什么能直接调用这个方法,如果你可以解释,记得留言,如果你不会,你可以问问会的,记住就可以了),注意加个' ./ ',这样就表示进入下一级了,然后依次找,就能发现二手房名称在a标签里面,同理找到价格,索引是从1开始。

    # 存储的就是li标签对象
        with open('.lianjia.html','w',encoding='utf-8') as hp:
            hp.write(lianjia_text)
        fp=open('./lianjia.txt','w',encoding='utf-8')
        for li in li_list:                                 
            title=li.xpath('./div[1]/div[1]/a/text()')[0] 
            price=li.xpath('./div[1]/div[6]/div[1]/span/text()')[0]  
            print(title)
            fp.write(title+price+' 万 '+'\n')

     --最后进行持久化存储即可,打出这个,就完成了,这个是初级的,也很简单,可以照着做一下。关于持久化存储,代码可以记一下,理解了最好。

    2.第二个案例:爬取网站上美女的图片https://pic.netbian.com/4kmeinv/,并且下载到文件夹

    --同上,先网络请求,然后对请求好的页面进行etree对象实例化,用以调用xpath方法

    import requests
    from lxml import etree
    import os
    # 需求:爬取https://pic.netbian.com/4kmeinv/的图片
    if __name__=='__main__':
        url1='https://pic.netbian.com/4kmeinv/'
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}
        response = requests.get(url1, headers)
    
        # 手动设定响应数据的编码格式,处理中文乱码
        response.encoding='gbk'
        meinv_text = response.text
     # 数据解析:src的属性值,alt属性
        tree=etree.HTML(meinv_text)
    

    --其实你会发现代码不是'utf-8',因为会出现乱码,把它换成''gbk试一试

    --接着你会发现这些个图片全都独立在li标签里面,又是在ul下面,所以按照之前的操作,先调用xpath方法生成个列表,然后遍历列表元素,然后列表里面再去定位图片的网址(img)(注意是不完整的,你得自己加上‘http’那些,以便后面发起请求)以及图片名称(alt)

    --其实重点在于,我们还需要发起第二次请求,去得到这个图片的数据。

    在遍历下再起发起请求,可以获得图片数据,既然得到了图片的数据内容,知道了图片的名称,接下来就是存储啦。由于图片是二进制格式,所以是content,写入是‘wb’,文本的话就是html,写入是‘w’。存储就是创个文件夹,然后图片保存是通过文件夹的路径+图片名称,然后把图片数据写进去,就成功啦!

    li_list=tree.xpath('//div[@class="slist"]/ul/li')
    
        # 创建一个文件夹
        if not os.path.exists('./meinv_piclibs'):
            os.mkdir('./meinv_piclibs')
    
        for li in li_list:
            img_url='https://pic.netbian.com'+li.xpath('./a/img/@src')[0] 如果不加这个索引,它其实是一个列表,你可以试一下
            img_name=li.xpath('./a/img/@alt')[0]+'.jpg'
            response2=requests.get(img_url,headers)
    
            # 请求图片持久化存储
            img_data=response2.content
            img_path='meinv_piclibs/'+img_name
            with open(img_path,'wb')as fp:
                fp.write(img_data)
                print(img_name,'下载成功!')
    

     --最后效果是这个亚子

    --我也喜欢美女!!!!!!!!!!!! 

    3.第三个案例:令我头秃的案例 去站长之家下载免费PPT素材

    在网址https://sc.chinaz.com/ppt/free.html中下载免费PPT

    嗯哼,看到这个,你是不是觉得很简单,没那么难,其实你会发现,涉及到下面3个页面,三次网络请求。看到这里,你也觉得没这么难,于是开开心心打算十分钟搞定。呵呵,幼稚!

    #1

    #2

    #3

     

    --其实,万变不离其宗,还是一样的方法,然而,实操的时候我遇到很多问题。

    --我的思路就是和上面一样的思路,还是调用xpath方法,然后找到这些素材被封装的标签,然后我就找到了下图这个,它其实和上面的ul是同一个功能,所以我把它写下来并且打印了一下,div_list=tree.xpath('//div[@class="ppt-list  masonry"]/div')    结果居然是个空列表,后来问人说是class有空格容易识别不出来,所以干脆从祖宗一代代传下来,这个耽误我好长时间,而且它和别的不一样,就是索引它不认!!!!!!!而且开始到现在我都不知道什么原因,是一步步调试出来的。

     

    import requests
    from lxml import etree
    import os
    
    from keras.utils.data_utils import get_file
    import zipfile
    import os
    
    第一次网络请求
    if __name__=='__main__':
        url1='https://sc.chinaz.com/ppt/free.html'
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}
        response = requests.get(url1, headers)
        response.encoding='utf-8'
        page_text=response.text
        tree=etree.HTML(page_text)
       
        div_list=tree.xpath('/html/body/div[3]/div[4]/div')此时得到了div的列表
        if not os.path.exists('./ppt_piclibs'):
            os.mkdir('./ppt_piclibs')
        if not os.path.exists('./ppt2_piclibs'):
            os.mkdir('./ppt2_piclibs')
    
    遍历一下列表
        for div in div_list:
    
    a和b是我用来调试的,放在这里希望给你思路
            a= div.xpath('./div')
            b= div.xpath('./div/a')
    
    我得到了新的url地址,为了做第二次网络请求;得到了名称
            new_url='https://sc.chinaz.com'+div.xpath('./div/a/@href')[0]
            name=div.xpath('./div/a/@title')[0]
            print(new_url)
            print(name)
            response2 = requests.get(new_url, headers)
            response2.encoding='utf-8'
            ppt_text = response2.text
    为了第三次网络请求能顺利进行,我先看看第二次网络请求有没有问题
    
            ppt_path='ppt_piclibs/'+name+'.html'
            with open(ppt_path,'w',encoding='utf-8') as fp:
                fp.write(ppt_text)
    
    

    --第二次网络请求的确得到了各个简历点进去的详情页,但是加载的不完整,可是足够看源代码了

    #文件夹下的样子

    #文件夹运行的样子

    #看下源代码

     

     --思路还是一样的呀,再看看上面加载页面的源代码,我再次用xpath定位到‘厦门电信下载’,其实你都不用遍历了,这个直接找到再网络请求就成了。 

    
            tree=etree.HTML(ppt_text)
            c=tree.xpath('//div[@class="Free-download"]/div[2]/div[1]/a/@href')
            final_url=tree.xpath('//div[@class="Free-download"]/div[2]/div[1]/a/@href')[0]
            print(final_url)
            response3=requests.get(new_url,headers)
            final_data=response3.text
            final_path = 'ppt2_piclibs/' + name + 'rar'
            print(final_path)
            dowloadFile(final_url, name + '.rar')
            print(name)
    

    --然后就是存储啦,说实话存储是最复杂的,还要调用很麻烦的模块,下载也很慢。你得定义这个函数,实际写代码,这个要定义在前面,因为我发现定义在后面无法调用。这个方法是搜索别人文章看到的,有更好的写法最好。

    # 下载代码
    def dowloadFile(url,name):
        file=name
        dir='D:/code/python/star/first/爬虫/ppt2_piclibs'
        try:
            path = get_file(fname=file,
                            origin=url, cache_subdir=dir)  #
            print('download---'+path)
        except:
            print('Error')
            raise
        pass
    

     总结:OK就到这里了,我可能讲的不够清晰,但是我就是这么理解的了。其实写爬虫我觉得重要的是思路,要有清晰地思路和运用工具的能力,很多时候你发现为什么和书上讲的不一样,这个时候要会调试,尝试去解决问题。

    另外,这个内容是我在B站学习了https://www.bilibili.com/video/BV1ha4y1H7sx?p=28 课程后写的,可以听一下老师的讲解,谢谢!

    求点赞啊,新人第一篇文章!!!!!!!!

     

     

     

     

     

    展开全文
  • xpath 获取元素及爬虫实例

    千次阅读 2019-04-02 17:32:16
    主流爬虫方法分类:1,selenium+Chrome/PhantomJS2,Requests+正则表达式3,Requests+ BeautifulSoup4,Requests+分析ajax5,Requests+xpath(lxml包)或CSS今天要讲的第5种。 原理:将有可能不合法的HTML 解析为...

    主流爬虫方法分类:
    1,selenium+Chrome/PhantomJS
    2,Requests+正则表达式
    3,Requests+ BeautifulSoup
    4,Requests+分析ajax
    5,Requests+xpath(lxml包)或CSS
    今天要讲的第5种。

    1. 原理:将有可能不合法的HTML 解析为统一格式。 虽然Lxml可以正确解析属性两侧缺失的引号,并闭合标签,不过该模块没有额外添加<
      html >和<body>标签 。CSS其实和lxml在内部实现相似,实际上是将CSS选择器转换为等价的Xpath选择器。
    2. 速度:Lxml模块使用 C语言编写,所以速度和re正则一样,非常快。
    3. 场景:大部分的页面解析和内容抓取。涉及到js和ajax的需要先加载js、ajax请求,再对页面进行解析和xpath定位抓取。
    4. 依赖库:lxml from lxml import etree
    5. 基本用法:Selector = etree.HTML(网页源代码)

        Selector.xpath(一段神奇的符号)
    6. xapth表达式:
      image

    7,xpath推荐学习链接:
    https://www.cnblogs.com/lei0213/p/7506130.html

    xpath定位方法:
    image
    (源码见附件)

    展开全文
  • 这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术1、首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构。每一组“li”对应一组套图。属性href后面即为套图的内页地址(即...

    某套图网站,套图以封面形式展现在页面,需要依次点击套图,点击广告盘链接,最后到达百度网盘展示页面。

    这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术

    1、首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构。每一组“li”对应一组套图。属性href后面即为套图的内页地址(即广告盘链接页)。所以,我们先得获取列表页内所有的内页地址(即广告盘链接页)

    代码如下:

    import requests 倒入requests库

    from lxml import etree 倒入lxml 库(没有这个库,pip install lxml安装)

    url = "https://www.xxxx.com/gc/" 请求地址

    response = requests.get(url= url) 返回结果

    wb_data = response.text 文本展示返回结果

    html = etree.HTML(wb_data) 将页面转换成文档树

    b = html.xpath('//ul[@class = "clearfix"]//@href') 这一步的意思是class“clearfix”下所有属性为“href”赋值给“b”,因为我们的目标内容都展示在class“clearfix”下,且在href属性后面

    print(b) 打印b,这里的b是一个数组

    print(b[0]) 打印b的第一项数据

    执行结果:成功返回所有内页

    2、打开内页(即广告盘链接页),获取广告盘地址。下图红色箭头,还不是真正的百度盘页,需要点击后才可以看的到百度盘的地址。所以这一步骤,只需要抓取红色箭头内容地址;

    代码如下:

    url = "https://www.192ta.com/gc/toutiao/87098.html"

    response = requests.get(url= url)

    wb_data = response.text # 将页面转换成文档树

    html = etree.HTML(wb_data)

    b = html.xpath('//div[@class = "pictext"]//@href')

    c=b[1] #需要注意的地方,class = "pictext"下有两个href,我们只需要第一个href的值,所以返回值再赋值给c且取第二项数据

    print(c)

    执行结果:成功返回所有内页

    3、获取到广告盘地址,接下来要打开该地址,抓百度盘真实地址。链接和提取码在两个不同的元素中,所有最后返回两组数据。

    代码如下:

    url = "http://17d.la/xam9I6"

    response = requests.get(url= url)

    wb_data = response.text

    # 将页面转换成文档树

    html = etree.HTML(wb_data)

    b = html.xpath('//tr/td/text()')

    c=b[6]#提取码

    d = html.xpath('//tr//@href')#百度地址

    print(c)

    print(d)

    注意,这里html.xpath写法与上面有些区别,目标元素的上级没有class,只能模糊取值

    比如提取码的HTML结构如下图,结构为//tr/td/,单/代表父节点下的子节点,双/代表父节点后的子孙节点。提取码为tr的子节点。但是这个结构下有很多组数据,最后输出一个数组b(看上面代码b)。如此,我们找到提取码位于数组序列,赋值给c(看上面代码c),这样获得了真实的百度盘地址

    网盘地址则因为有href属性,所以好爬去一些,注意/的数量即可

    4、把以上步骤拼成一个脚本,这里就涉及到函数和函数之间的传参,还有循环的问题。代码直接贴出来

    # -*-coding:utf8-*-

    import requests

    from lxml import etree

    firstlink = "https://www.xxx.com/gc/qt/83720.html"

    #第一步,获取第一页面所有的地址

    def stepa ():

    url = "https://www.xxx.com/gc/"

    response = requests.get(url=url)

    wb_data = response.text

    # 将页面转换成文档树

    html = etree.HTML(wb_data)

    a = html.xpath('//ul[@class = "clearfix"]//@href')

    return(a)

    alllink = stepa()

    #第二步,获取的地址,循环读取打开,从而获取百度网盘信息

    def stepb(alllink,firstlink):

    for url in alllink:

    if url == firstlink:

    continue

    response = requests.get(url=url)

    wb_data = response.text

    # 将页面转换成文档树

    html = etree.HTML(wb_data)

    b = html.xpath('//div[@class = "pictext"]//@href')

    c = b[1]

    #获取到广告页地址

    url2 = c

    response = requests.get(url=url2)

    wb_data = response.text

    # 将页面转换成文档树

    html = etree.HTML(wb_data)

    b = html.xpath('//tr/td/text()')

    c = b[6]

    d = html.xpath('//tr//@href')

    print(c)

    print(d)

    #获取百度地址和提取码

    stepb(alllink,firstlink)

    需要注意的地方:

    1、return的用法,如果想把函数生成的值传给后面的函数用,就需要返回这个值,如def stepa 里定义的a为爬去的套图封面地址(通过打开这个地址进行下一步),就需要return(a)返回a的值,否则执行后无数据

    2、Continue的应用,因为第一个套图地址打开的内容没有目标内容,这样找不到元素会报错,所以需要读取套图地址的时候要跳过第一个地址。加一个if判断,当第一个地址等于事先定义好的非正常地址的时候,跳过这个循环

    打印结果:

    参考地址:https://cuiqingcai.com/5545.html

    展开全文
  • 先演示一段获取页面链接代码示例... keyword_tag = page.xpath("//meta[translate(@name,'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')='keywords']")   以上的内容是转载的,感觉很有用  
  • 在项目下新建一个xpath.html 文件,编写代码解析books.xml。代码如下: Title/*定义一个函数用来加载xml文档*/function loadXMLDoc(dname) {if (window.XMLHttpRequest) {xhttp = new XMLHttpRequest();//获取...
  • XPath与lxml库介绍及爬虫案例

    千次阅读 多人点赞 2017-11-16 17:24:17
    XPath与lxml库介绍及爬虫案例XPath介绍XPath(XML Path Language)是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历。XPath的节点XPath的节点有7种类型:文档节点,元素节点,属性节点,...
  • 爬虫案例(xpath

    2019-07-16 21:27:00
    爬虫案例(某某二手房) 步骤 请求模块 # 封装一个函数,用于将url处理成请求对象 def request_by(url,city,page): page_url = url%(city,page) # 请求头 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT ...
  • 常用的路径表达式:实例:安装xpath插件到浏览器。看代码中的使用:爬取好段子 xpath 解析网页 什么是xpath ? xml: 可扩展标记语言,用来传输和存储数据。他的标签没有预定义,要自己定义标签。 与html的区别: ...
  • XPath爬虫

    2019-01-09 22:05:16
    XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线。 XPath介绍: 是什么? 全称为XML Pa...
  • # 排名 rank = info.xpath('./td[1]/text()')[0] # 学校名 name = info.xpath('./td[2]/div/text()')[0] # 省份 province = info.xpath('./td[3]/text()')[0] # 总分 score = info.xpath('./td[4]/text()')[0] ...
  • Python爬虫实例--新浪热搜榜[xpath语法] 1.基础环境配置: requests-->版本:2.12.4 lxml-->版本:3.7.2 2.网页分析 很容易从html源码中看到,热搜内容在html的<a></a>标签内,热度在<...
  • 爬虫中,数据解析方法有很多中,比如正则表达式、bs4、Xpath、pyquery等,这个专栏所涉及到的爬虫主要以Xpath为主。 Xpath解析:最常用且最便捷高效的一种解析方式,通用性强。 1. Xpath解析原理 (1)实例化一...
  • 爬虫xpath的使用

    2019-06-29 16:11:02
    使用正则来提取网页中的数据虽然效率很快,但是使用起来 比较复杂,在此就有另一种进行网页数据提取的方法就是使用xpath来进行。 (1)先将 HTML文件 转换成 XML文档; (2)然后用 XPath 查找 HTML 节点或元素。 1...
  • XPath 术语XPath 节点七种类型:在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。节点关系:父、...
  • 创建一个爬虫项目 #分析网站 分析网页界面 分析网页结构 分析网页原代码 1.分析网页界面 在纵横中文网首页,我们需要通过搜索栏查看想看的小说 ##2.分析网页结构 但我们点击浏览时,我们会...
  • 第1章 网络爬虫概述 11.1 认识网络爬虫 11.1.1 网络爬虫的含义 11.1.2 网络爬虫的主要类型 21.1.3 简单网络爬虫的架构 31.1.4 网络爬虫的应用场景 31.2 Python网络爬虫技术概况 41.2.1 Python中实现...
  • 今天小编就为大家分享一篇用xpath获取指定标签下的所有text的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python爬虫中的xpath的简单用法(小例子) 简介 首先,XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。...
  • Python爬虫实例教程;网页解析基础 Xpath语法;lxml是一个网页解析库XPath 是一门在 XML 文档中查找信息的语言XPath 可用来在 XML 文档中对元素和属性进行遍历 安装 pip install lxml ;如果安装失败可以从/~gohlke/...
  • 比较可以发现书名的 xpath 信息仅仅 table 后的序号不一样,并且跟书的序号一致,于是去掉序号(去掉 tbody),我们可以得到通用的 xpath 信息: //*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[1]/a ...
  • Python爬虫实例教程讲师日月光华网页解析基础 Xpath高级用法答疑群945189407提取属性值提取属性就是说我们想要提取的内容是某个标签里面的某个属性的值使用如下形式获取@属性根据属性共同点获取元素selector.xpath'/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,318
精华内容 3,727
关键字:

xpath爬虫实例

爬虫 订阅