精华内容
下载资源
问答
  • 爬虫利器 xpath 实践案例
    2021-12-03 11:10:04

    爬虫利器 xpath 实践案例

    xpath

    • . 表示当前 //表示当前标签下的所有标签
      注: 要配合使用

    • /@匹配某标签的属性值: /@属性名称

    • 获取弟节点- following-sibling::

    • 获取兄弟节点- preceding-sibling::

    • 获取父节点- parent::

    • 排除某个class属性标签 [not(contains(@class, "disabled"))]

    • 排除某个标签 [name(.)!="a"]

    • 忽略xpath中的第一个和最后一个元素 [position()> 1] 和 [position()< last()]

    • 多标签分隔字符串查找 text()=" 楼" and text()="栋"and text()="数: "]

    • 排除有class属性标签 //tbody/tr[not(@class)]

    • 去除字符串空格换行 normalize-space()

    • 模糊查找标签内容字符保护层的元素 //div[@class="tr-line clearfix"]/div/div[contains(text(),"层")]/text()

    • 匹配包含多个属性的标签: and

    匹配所有的tr中不包含 tbhead 属性 和包含 head 的tr标签
    xpath(’//table/tr[not(@class=“tbhead”) and @class=“head”]’)

    • 获取a标签最后一个元素 a[last()]
    • 在一个xpath中写的多个表达式用 | 分开, 每个表达式互不干扰。
      例:xpath("//tr[6]/td[2]/text() | //tr[7]/td[2]/text()")
    • 样式模糊 [contains(@class,'Number Skill')]
    • 返回标签内包含字符串 string(//p)
    • starts-with 定位属性值id以cb开头的a元素

    $x("//a[starts-with(@id,‘cb’)]/text()")

    chrome 使用xpath

    1. $x 关键词
    $x("//a/text()") # 获取页面所有a标签包含的字符
    
    更多相关内容
  • 这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术 1、首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构。每一组“li”对应一组套图。属性href后面即为套图的内页地址(即...
  • 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。 # tieba_xpath.py #!/usr/bin/env python # -*- coding:utf-8 -*- import os import ...

    现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。

    # tieba_xpath.py
    
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import os
    import urllib
    import urllib2
    from lxml import etree
    
    class Spider:
        def __init__(self):
            self.tiebaName = raw_input("请需要访问的贴吧:")
            self.beginPage = int(raw_input("请输入起始页:"))
            self.endPage = int(raw_input("请输入终止页:"))
    
            self.url = 'http://tieba.baidu.com/f'
            self.ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}
    
            # 图片编号
            self.userName = 1
    
        def tiebaSpider(self):
            for page in range(self.beginPage, self.endPage + 1):
                pn = (page - 1) * 50 # page number
                word = {'pn' : pn, 'kw': self.tiebaName}
    
                word = urllib.urlencode(word) #转换成url编码格式(字符串)
                myUrl = self.url + "?" + word
    
                # 示例:http://tieba.baidu.com/f? kw=%E7%BE%8E%E5%A5%B3 & pn=50
                # 调用 页面处理函数 load_Page
                # 并且获取页面所有帖子链接,
                links = self.loadPage(myUrl)  # urllib2_test3.py
    
        # 读取页面内容
        def loadPage(self, url):
            req = urllib2.Request(url, headers = self.ua_header)
            html = urllib2.urlopen(req).read()
    
            # 解析html 为 HTML 文档
            selector=etree.HTML(html)
    
            #抓取当前页面的所有帖子的url的后半部分,也就是帖子编号
            # http://tieba.baidu.com/p/4884069807里的 “p/4884069807”
            links = selector.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href')
    
            # links 类型为 etreeElementString 列表
            # 遍历列表,并且合并成一个帖子地址,调用 图片处理函数 loadImage
            for link in links:
                link = "http://tieba.baidu.com" + link
                self.loadImages(link)
    
        # 获取图片
        def loadImages(self, link):
            req = urllib2.Request(link, headers = self.ua_header)
            html = urllib2.urlopen(req).read()
    
            selector = etree.HTML(html)
    
            # 获取这个帖子里所有图片的src路径
            imagesLinks = selector.xpath('//img[@class="BDE_Image"]/@src')
    
            # 依次取出图片路径,下载保存
            for imagesLink in imagesLinks:
                self.writeImages(imagesLink)
    
        # 保存页面内容
        def writeImages(self, imagesLink):
            '''
                将 images 里的二进制内容存入到 userNname 文件中
            '''
    
            print imagesLink
            print "正在存储文件 %d ..." % self.userName
            # 1. 打开文件,返回一个文件对象
            file = open('./images/' + str(self.userName)  + '.png', 'wb')
    
            # 2. 获取图片里的内容
            images = urllib2.urlopen(imagesLink).read()
    
            # 3. 调用文件对象write() 方法,将page_html的内容写入到文件里
            file.write(images)
    
            # 4. 最后关闭文件
            file.close()
    
            # 计数器自增1
            self.userName += 1
    
    # 模拟 main 函数
    if __name__ == "__main__":
    
        # 首先创建爬虫对象
        mySpider = Spider()
        # 调用爬虫对象的方法,开始工作
        mySpider.tiebaSpider()
    

    在这里插入图片描述

    展开全文
  • xpath复习 导入第三方库,向网页发起请求,获取html文件,把html文件加载成element对象加载给tree,然后就可以使用xpath方法,xpath是不确定的路径,通过字符串的形式把确定的路径传进去,就能够根据路径找到元素。 ...

    xpath复习

    导入第三方库,向网页发起请求,获取html文件,把html文件加载成element对象加载给tree,然后就可以使用xpath方法,xpath是不确定的路径,通过字符串的形式把确定的路径传进去,就能够根据路径找到元素。
    需求:
    取出前三个li标签里文本值和class值,保存到csv文件里

    from lxml import etree
    import csv
    # etree 里包含了xpath的一些功能
    html = """
    <html>
        <head>
            <title>测试</title> 
        </head>
        <body>
             <li class="item-0">first item</li>
             <li class="item-1">second item</li>
             <li class="item-inactive">third item</li>
             <li class="item-1">fourth item</li>
             <div>
                <li class="item-0">fifth item</li>
             </div>
             <span>
                <li class="item-0">sixth item</li>
                <div>
                    <li class="item-0">eighth item</li>
                </div>
             </span>
         </body>
    </html>
    """
    tree = etree.HTML(html)
    # 需求:获取前三个li标签里的内容
    # /表示层级关系,//表示子字节(子子孙孙的内容)
    # text = tree.xpath('//li/text()')  # ['first item', 'second item', 'third item', 'fourth item', 'fifth item', 'sixth item', 'eighth item']
    # 以列表的形式显示li里的所有内容,可以用下标索引,左闭右开,获取属性不用text()
    text = tree.xpath('//li/text()')[:3]  # ['first item', 'second item', 'third item']
    cs = tree.xpath('//li/@class')[:3]  # ['item-0', 'item-1', 'item-inactive'],获取class的属性值
    # 以 {'class':'item-0','text':'first item'},{'class':'item-1','text':'second item'}的形式存放
    # print(text)
    # print(cs)
    lis_data = []  # 用来存放所有的数据
    for c in cs:
        d = {}  # 定义一个字典,用来存放一条数据
        # print(c)  # item-0 item-1 item-inactive
        # # print(cs.index(c))  # 0 1 2  打印的内容和索引值一一对应
        # print(text[cs.index(c)])
        # print('*'*50)  # 循环成对对应取出文本和属性值。
        d['class'] = c
        d['text'] = text[cs.index(c)]  # 循环添加key和value值到空字典中
        # print(d)
        lis_data.append(d)  # 把获取的字典添加到空列表中
    # print(lis_data)
    # 保存数据
    header = ('class', 'text')
    with open('lis_data.csv', 'w', encoding='utf-8', newline="") as f:
        write = csv.DictWriter(f, header)
        write.writeheader()
        write.writerows(lis_data)
    

    案例分析:爬取某瓣Top250

    目标

    如何用xpath解析数据,熟悉xpath解析数据的方式。
    通过观察目标网站了解爬取的需求,最终把数据保存到csv里。

    需求

    需要爬取的内容:标题 评分 评价人数 引言 详情页面url

    页面分析

    先复制一部分内容,看是否在网页源码中,点击鼠标右键,查看网页源码,通过下面的图片可以看到,我们需要的内容都在网页源码中,我们只需要对目标网站(https://movie.douban.com/top250)发起请求,在网页源码中提取数据就可以了,网站是静态加载出来了,属于服务器渲染。要得到250条数据还要有个翻页的处理,只需要爬取第一页的内容,再动态的更替start值,就可以得到其他页面的数据
    目标url:https://movie.douban.com/top250
    ​我们可以试着把第一页的url改为start=0,仍然可以访问第一页
    翻页处理
    https://movie.douban.com/top250?start=0 第一页 025
    https://movie.douban.com/top250?start=25 第二页 1
    25
    https://movie.douban.com/top250?start=50 第三页 225
    https://movie.douban.com/top250?start=75 第四页 3
    25
    start = (page-1) * 25

    在这里插入图片描述
    鼠标放到页面第一个电影“肖生克的救赎”名字处,点右键,检查,可以看到当光标放到肖生克的救赎处,对应标题处于高亮状态,放到<div class ="info"处整个电影的信息处于高亮,说明需要的信息都在此标签下面;光标放到<div class ="pic"处,图片高亮,可以在此次获取图片的信息;光标放到·<·li>处,第一个影片所有的信息都处于高亮状态,说明·<·li>标签里包含整个影片的信息;再往下看一共25个·<·li>标签,光标放到相应标签上分别对应本页面25个影片。element是最终加载出来的,我们还是要去网页源码中去看一下是否一致,比如复制’class=“info”'到网页源码中查看,可以看到有25个一样的标签。
    在这里插入图片描述
    用快捷键 CTRL+shift+x 打开xpath helper,可以通过路径找到电影名字所在的位置
    在这里插入图片描述

    步骤

    • 发请求,获网页源码,第一个函数
    • 获取源码,解析数据,第二个函数。每一条数据都放在一个li标签的class="info"的div标签里面 再去class="info"的div标签中解析数据
    • 保存数据,第三个函数。[{‘title’:‘xxx’, ‘score’:‘xxx’, ‘com_num’:‘xxx’, ‘quote’: ‘xxx’, ‘link_url’: ‘xxx’}, {xxx},{xxx}]
      ​* 需要用到的工具:requests xpath csv

    代码实现

    import requests
    from lxml import etree
    import csv
    
    # 发请求,获相应。传入发起请求的url
    def get_url(url):
    
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62'
        }
        res = requests.get(url, headers=headers)
        html = res.content.decode("utf-8")
        # print(html)
        return html
    
    # 解析数据
    def s_sourse(h):
        # 将网页源码加载成element对象
        tree = etree.HTML(h)
        divs = tree.xpath('//div[@class="info"]')
        # print(len(divs))  # 25个
        last_data = []  # 存放所有数据的列表
        for div in divs:  # 用xpath获取到所有影片的info信息,再从每一个影片对象里去提取
            d = {}  # 用来存储一条数据的字典
            # print(div)
            # 用获取对象的相对路径获取每一个影片的信息,列表的下标从0开始,strip()去除字符串首尾的空白字符,
            # 如果去除字符串中间的空白字符,可以用replace()
            title = div.xpath('./div[@class="hd"]/a/span[@class="title"][1]/text()')[0].strip()
            score = div.xpath('./div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0].strip()
            com_mun = div.xpath('./div[@class="bd"]/div[@class="star"]/span[4]/text()')[0].strip()
            quote = div.xpath('./div[@class="bd"]/p/span/text()')
            link_url = div.xpath('./div[@class="hd"]/a/@href')[0].strip()
            # print(title, score, com_mun, quote, link_url)
            # [0].strip() 取出列表的第一个元素,为了存储方便
            # 以key,value值的形式添加到空字典中
            d['title'] = title
            d['score'] = score
            d['com_mun'] = com_mun
            if quote:
                d['quote'] = quote[0].strip()
            else:
                d['quote'] = ""
            d['link_url'] = link_url
            # print(d)
            # 把存放一条数据的字典插入列表
            last_data.append(d)
            # 每一个电影的数据存放在一个字典中,所有电影的数据存放在大列表中
        # print(last_data)
        return last_data
    
    # 保存数据
    def save_page(last_data, header):
        # w是从头开始写, a是追加
        with open('movie_data2.csv', 'a', encoding='utf-8', newline="") as f:
            writ = csv.DictWriter(f, header)
            # 写入表头不再传参
            writ.writeheader()
            # writerows 一次写入多行数据
            writ.writerows(last_data)
    
    # 主函数 调用函数
    def main():
    
        for m in range(10):
            print(f'正在爬取第{m}页')
            url = f'https://movie.douban.com/top250?start={m*25}'
            # url = f'https://movie.douban.com/top250'
            h = get_url(url)
            # 表头可以用字典,列表,元组的形式传入
            header = ('title', 'score', 'com_mun', 'quote', 'link_url')
            lis = s_sourse(h)
            save_page(lis, header)
    
    
    if __name__ == '__main__':
        main()
    

    到此为止实现了翻页爬取数据,这里有一个坑,一定要注意:quote部分会出现空白,导致程序出现“IndexError: list index out of range”,在取quote的时候,“quote = div.xpath(’./div[@class=“bd”]/p/span/text()’)”,不能在后面[0].strip(),因为本身取得数据都是空白的,你在去除空白后,会使得到的结果有问题。这一部分正常取值,在加到字典里的时候,对quote进行判断,如果不为空,就返回“quote[0].strip()”,为空就直接返回“”,这样的话课避免出现错误。
    得到结果后会发现,重复打印了表头,下面列举几种方法去除重复的表头。

    方法一:只改动主函数
    def main():
        data_box = []  # 定义一个盒子放所有的数据
        # 表头可以用字典,列表,元组的形式传入
        header = ('title', 'score', 'com_mun', 'quote', 'link_url')
        for m in range(10):
            time.sleep(5)
            print(f'正在爬取第{m}页')
            url = f'https://movie.douban.com/top250?start={m * 25}'
            # url = f'https://movie.douban.com/top250'
            h = get_url(url)
            data_box += s_sourse(h)  # 把函数的返回值都装到盒子里
        # print(data_box)
        save_page(data_box, header)
    
    

    方法一:在主函数中定义一个放所有数据的盒子,把获取的数据都放到盒子里,然后把盒子data_box作为参数传到save_page()函数里面,多行打印的时候就只打印数据了。测试的时候ip被封了,用了爬虫文件(三)里的讲的设置代理IP,请求头里加上了别人进入网页后的cookie才能正常访问,为了避免再次被封,所以加了个time时间的限制。

    方法二:提前在主函数中写入表头,循环之后在save_page()里只写入数据
    def save_page(last_data, header):
        # w是从头开始写, a是追加
        with open('movie_data3.csv', 'a', encoding='utf-8', newline="") as f:
            writ = csv.DictWriter(f, header)
    
            # writerows 一次写入多行数据
            writ.writerows(last_data)
    
    # 主函数 调用函数
    def main():
        header = ('title', 'score', 'com_mun', 'quote', 'link_url')
        with open('movie_data3.csv', 'a', encoding='utf-8', newline="") as f:
            writ = csv.DictWriter(f, header)
            writ.writeheader()
        for m in range(10):
            time.sleep(5)
            print(f'正在爬取第{m}页')
            url = f'https://movie.douban.com/top250?start={m * 25}'
            # url = f'https://movie.douban.com/top250'
            h = get_url(url)
            lis = s_sourse(h)  # 把函数的返回值都装到盒子里
        # print(data_box)
            save_page(lis, header)
    

    方法二:在主函数main中,先在循环体外面把文件的表头写进去,在写入数据save_page的时候,只写爬取到的数据。

    方法三:不用写入函数,在主函数里先写入表头,在直接写入多行数据
    def main():
        header = ('title', 'score', 'com_mun', 'quote', 'link_url')
        f = open('movie_data4.csv', 'a', encoding='utf-8', newline="")
        writ = csv.DictWriter(f, header)
        # 写入表头不再传参
        writ.writeheader()
        for m in range(10):
            time.sleep(5)
            print(f'正在爬取第{m}页')
            url = f'https://movie.douban.com/top250?start={m*25}'
            # url = f'https://movie.douban.com/top250'
            h = get_url(url)
            # 表头可以用字典,列表,元组的形式传入
    
            lis = s_sourse(h)
            # save_page(lis, header)
            writ.writerows(lis)
            
    

    方法三:在main函数中直接写入表头,数据解析函数s_sourse 得到的数据不再往写入函数save_page中传,直接存放到表中

    方法四:在主函数中定义遍历的m为全局变量,在写入函数的时候对m进行判断,如果是第一次写入就写表头,否则不写表头
    # 保存数据
    def save_page(last_data, header):
        # w是从头开始写, a是追加
        with open('movie_data5.csv', 'a', encoding='utf-8', newline="") as f:
            writ = csv.DictWriter(f, header)
            if m == 0:
                writ.writeheader()
            # writerows 一次写入多行数据
            writ.writerows(last_data)
    
    # 主函数 调用函数
    def main():
        global m
        for m in range(10):
            time.sleep(5)
            print(f'正在爬取第{m}页')
            url = f'https://movie.douban.com/top250?start={m * 25}'
            # url = f'https://movie.douban.com/top250'
            header = ('title', 'score', 'com_mun', 'quote', 'link_url')
            h = get_url(url)
            lis = s_sourse(h)  # 把函数的返回值都装到盒子里
        # print(data_box)
            save_page(lis, header)
    

    方法四:巧妙的点是在main中把用于遍历的“m”定义为全局变量,这样可以把m用于其他函数,在save_page中就对m进行一下判断,如果为0,说明是写入的第一页,就写入表头,否则就不写入表头。

    展开全文
  • 文章目录xpath基本概念xpath解析原理环境安装如何实例化一个etree对象:xpath(‘xpath表达式’)xpath爬取58二手房实例爬取网址完整代码效果图xpath图片解析下载实例爬取网址完整代码效果图xpath爬取全国城市名称实例...

    文章目录

    • xpath基本概念

    • xpath解析原理

    • 环境安装

    • 如何实例化一个etree对象:

    • xpath(‘xpath表达式’)

    • xpath爬取58二手房实例

    • 爬取网址

    • 完整代码

    • 效果图

    • xpath图片解析下载实例

    • 爬取网址

    • 完整代码

    • 效果图

    • xpath爬取全国城市名称实例

    • 爬取网址

    • 完整代码

    • 效果图

    • xpath爬取简历模板实例

    • 爬取网址

    • 完整代码

    • 效果图

    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.HTML(‘page_text’)

    xpath(‘xpath表达式’)

    • /:表示的是从根节点开始定位。表示一个层级

    • //:表示多个层级。可以表示从任意位置开始定位

    • 属性定位://div[@class='song'] tag[@attrName='attrValue']

    • 索引定位://div[@class='song']/p[3] 索引从1开始的

    • 取文本:

      • /text()获取的是标签中直系的文本内容

      • //text()标签中非直系的文本内容(所有文本内容)

    • 取属性:/@attrName ==>img/src

    xpath爬取58二手房实例

    爬取网址

    https://xa.58.com/ershoufang/完整代码

    from lxml import etree
    import requests
    
    if __name__ == '__main__':
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
        }
        url = 'https://xa.58.com/ershoufang/'
        page_text = requests.get(url=url,headers=headers).text
        tree = etree.HTML(page_text)
        div_list = tree.xpath('//section[@class="list"]/div')
        fp = open('./58同城二手房.txt','w',encoding='utf-8')
        for div in div_list:
            title = div.xpath('.//div[@class="property-content-title"]/h3/text()')[0]
            print(title)
            fp.write(title+'\n'+'\n')

    f9edc49e584956a58f6c80e0d83adda8.png

    xpath图片解析下载实例

    爬取网址

    https://pic.netbian.com/4kmeinv/完整代码

    import requests,os
    from lxml import etree
    
    if __name__ == '__main__':
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
        }
        url = 'https://pic.netbian.com/4kmeinv/'
        page_text = requests.get(url=url,headers=headers).text
        tree = etree.HTML(page_text)
        li_list = tree.xpath('//div[@class="slist"]/ul/li/a')
        if not os.path.exists('./piclibs'):
            os.mkdir('./piclibs')
        for li in li_list:
            detail_url ='https://pic.netbian.com' + li.xpath('./img/@src')[0]
            detail_name = li.xpath('./img/@alt')[0]+'.jpg'
            detail_name = detail_name.encode('iso-8859-1').decode('GBK')
            detail_path = './piclibs/' + detail_name
            detail_data = requests.get(url=detail_url, headers=headers).content
            with open(detail_path,'wb') as fp:
                fp.write(detail_data)
                print(detail_name,'seccess!!')

    a13f89d3ae90faee15104db3e47a3e73.png

    xpath爬取全国城市名称实例

    爬取网址 

    https://www.aqistudy.cn/historydata/完整代码

    import requests
    from lxml import etree
    
    if __name__ == '__main__':
        url = 'https://www.aqistudy.cn/historydata/'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
        }
        page_text = requests.get(url=url,headers=headers).content.decode('utf-8')
        tree = etree.HTML(page_text)
        #热门城市   //div[@class="bottom"]/ul/li
        #全部城市   //div[@class="bottom"]/ul/div[2]/li
        a_list = tree.xpath('//div[@class="bottom"]/ul/li | //div[@class="bottom"]/ul/div[2]/li')
        fp = open('./citys.txt','w',encoding='utf-8')
        i = 0
        for a in a_list:
            city_name = a.xpath('.//a/text()')[0]
            fp.write(city_name+'\t')
            i=i+1
            if i == 6:
                i = 0
                fp.write('\n')
        print('爬取成功')

    3ac17664276970fb93574450d9401f7f.png

    xpath爬取简历模板实例

    爬取网址

    https://sc.chinaz.com/jianli/free.html完整代码

    import requests,os
    from lxml import etree
    
    if __name__ == '__main__':
        url = 'https://sc.chinaz.com/jianli/free.html'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
        }
        page_text = requests.get(url=url,headers=headers).content.decode('utf-8')
        tree = etree.HTML(page_text)
        a_list = tree.xpath('//div[@class="box col3 ws_block"]/a')
        if not os.path.exists('./简历模板'):
            os.mkdir('./简历模板')
        for a in a_list:
            detail_url = 'https:'+a.xpath('./@href')[0]
            detail_page_text = requests.get(url=detail_url,headers=headers).content.decode('utf-8')
            detail_tree = etree.HTML(detail_page_text)
            detail_a_list = detail_tree.xpath('//div[@class="clearfix mt20 downlist"]/ul/li[1]/a')
            for a in detail_a_list:
                download_name = detail_tree.xpath('//div[@class="ppt_tit clearfix"]/h1/text()')[0]
                download_url = a.xpath('./@href')[0]
                download_data = requests.get(url=download_url,headers=headers).content
                download_path = './简历模板/'+download_name+'.rar'
                with open(download_path,'wb') as fp:
                    fp.write(download_data)
                    print(download_name,'success!!')

    310a9782968f8038396b50578797b9a2.png


    这是我开发的机器人公众号小号,目前增加了天气查询,955公司名单,关注时间查询;后面还会增加图片功能和每日送书抽奖送书活动,以及调戏功能,欢迎来体验,捧场。

    一个机器人公众号已经上线,欢迎调戏

    
     
    推荐阅读:
    入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
    干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
    趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
    AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
    小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

    年度爆款文案

    点阅读原文,看B站我的视频!

    展开全文
  • 爬取豆瓣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/...
  • 1. 一个最简单的 request+xpath获取内容 # +---------------------------------------------------------------------- # | User: zq # | Version: python3.7 # | Time: 2020-03-09 09:33 # +--------------------...
  • 爬虫案例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 获取元素及爬虫实例

    千次阅读 2019-04-02 17:32:16
    主流爬虫方法分类:1,selenium+Chrome/PhantomJS2,Requests+正则表达式3,Requests+ BeautifulSoup4,Requests+分析ajax5,Requests+xpath(lxml包)或CSS今天要讲的第5种。 原理:将有可能不合法的HTML 解析为...
  • python爬虫学习 2.4 (使用Xpath案例) 啥都不说了,直接看代码吧 # coding=utf-8 import requests from lxml import etree import json class TiebaSpider: def __init__(self,tieba_name): self.tieba_name = ...
  • 爬虫中,数据解析方法有很多中,比如正则表达式、bs4、Xpath、pyquery等,这个专栏所涉及到的爬虫主要以Xpath为主。 Xpath解析:最常用且最便捷高效的一种解析方式,通用性强。 1. Xpath解析原理 (1)实例化一...
  • 我是学了正则和bs4然后学的xpath,其实我开始并不想做笔记,但是发现自己学完了之后就全忘记了,特意做一下笔记。我着重讲实例。 求点赞、评论、关注!!!!!! 可以先看一下xpath的基本逻辑: #xpath解析原理...
  • 爬虫xpath及实例

    千次阅读 2022-03-15 10:56:42
    xpath的使用方法 tree.xpath(/html/body/div) 逐级定位 tree.xpath(/html//div) 两个//可以跨级定位 tree.xpath(//div[@class=“song”]/p) 可以按照属性值定位 tree.xpath(//div[@class=“song”]/p[3]) 可以定位到...
  • 使用XPath来获取xml文档中内容的一个小案例
  • xpath爬取案例

    2021-10-30 18:49:47
    import requests from lxml import etree url = ...response = requests.get(url) # print(response.text) response.close() ...divs = html.xpath("/html/body/div[6]/div/div/
  • XPath与lxml库介绍及爬虫案例

    万次阅读 多人点赞 2017-11-16 17:24:17
    XPath与lxml库介绍及爬虫案例XPath介绍XPath(XML Path Language)是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历。XPath的节点XPath的节点有7种类型:文档节点,元素节点,属性节点,...
  • 分享一篇使用部分爬虫技术简单实现对媒体类网页按需求爬取文章并保存到本地指定文件夹的案例,仅供相关学习者参考,学习过程切勿对网站频繁访问而造成网页瘫痪,量力而为!!!
  • 爬虫实战–用xpath技术爬取猫眼电影的信息 文章目录前言一、步骤二、模块化代码1.打结构2.使用解析xpath总代码展示 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、步骤 (1)导入requests库和解析...
  • xpath解析爬取彼岸网4K图片爬取源代码,所谓的4k并非真正的4k,因为4k图片需要登录下载,并且一天只能下载一张,以本人得技术实现不了,只是个人在学习的时候编写的.顺便分享出来, 如果有大神可以有简单易懂的方法来解决...
  • 爬虫案例xpath的使用

    千次阅读 2018-02-22 09:46:51
    当然得先有大量图片,这就用到了我们的爬虫。我选的目标是hupu,因为想做关于渣科的目标网站:http://photo.hupu.com/nba/tag/%E7%A7%91%E6%AF%94首先当然得分析网页源码:思路是:首先得到一个url_list用来存放每个...
  • xpath(‘xpath表达式’) xpath爬取58二手房实例 爬取网址 完整代码 效果图 xpath图片解析下载实例 爬取网址 完整代码 效果图 xpath爬取全国城市名称实例 爬取网址 完整代码 效果图 xpath爬取简历模板实例 爬取网址 ...
  • 本篇是使用XPath案例,更多内容请参考:Python学习指南案例:使用XPath爬虫现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载到本地。#-*- coding:utf-8 ...
  • 适合听课小白进行练习,因为本人就是听取课程之后进行自己练习,效果不错
  • 好久没更新博文了,最近忙于学习scrapy框架和微信小程序开发,今天看到一个自己之前写的但是中途放弃的爬虫案例——爬取猫眼电影TOP100榜的相关数据,现在将它写好并分享给大家。 爬虫的套路就是通过url发送请求...
  • xpath爬虫二手房案例代码

    千次阅读 2022-04-02 11:23:13
    标签定位 div_list = root.xpath('//section[@class="list"]/div') fp = open("D:\sxwang\project\pycharm\python-sk\data\二手房.txt","w",encoding="jbk") for div in div_list: #标签定位 title = div.xpath('./a...
  • Python爬虫实例--新浪热搜榜[xpath语法] 1.基础环境配置: requests-->版本:2.12.4 lxml-->版本:3.7.2 2.网页分析 很容易从html源码中看到,热搜内容在html的<a></a>标签内,热度在<...
  • 1.案例1 需求:爬取58二手房中的房源信息(标题)https://bj.58.com/ershoufang/ 发现爬取规律: import requests from lxml import etree # 需求:爬取58二手房中的房源信息 if __name__ == "__main__": ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,223
精华内容 2,489
关键字:

xpath爬虫案例