python中使用xpath实现段子网-“段子来了”分类下所有页面的段子和图片

phpmaster 2019-12-26 PM 1340℃ 0条

2878420530 (1).jpg
4168172313.jpg

# 导入xpath模块 用于解析页面数据
    from lxml import etree
    # 导入系统模块 用于自动创建目录
    import os
    # 导入requests模块用于发送http请求
    import requests
    # 发起请求获取数据
    def get_content(url):
        # user-agent 设置头信息 模拟浏览器访问
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
        }
        return requests.get(url=url, headers=headers)
    # 总页码
    url = "http://duanziwang.com/category/%E6%AE%B5%E5%AD%90%E6%9D%A5%E4%BA%86/1"
    res = get_content(url=url)
    etree2 = etree.HTML(res.text)
    page = etree2.xpath('//span[@class="page-number"]/text()')[0]
    p = int(page.split()[-2])
    
    # 循环所有的页面
    for i in range(1,p+1):
        print("正在保存第%s页数据。。。。" % str(i))
        # 每一页的url
        url = "http://duanziwang.com/category/%E6%AE%B5%E5%AD%90%E6%9D%A5%E4%BA%86/"+str(i)
        response = get_content(url)
        etree1 = etree.HTML(response.text)
        article_list = etree1.xpath("//article")
    
        # 打开文件 以当前页面为文件名 把当前页面的所有数据保存到一个文件中
        f = open("./img/%sduanzi.txt"%str(i),'w',encoding="utf-8")
        # 循环遍历每一页的所有数据
        for art in article_list:
            # 打开一张图片 每次for循环执行一次 即可保存一张图片
            # 标题
            title = art.xpath("./div/h1/a/text()")[0]
            # 写入一个标题
            f.write(title+"\n\n")
            print(title+"保存成功。。。")
            # 如果获取的数据中p标签下有图片的话
            if len(art.xpath("./div[2]/p/img")):
                # 把每一页的图片都保存到当页的目录中
                # 如果当页有图片的话,才去创建目录 用于保存当页的图片
                my_dir = './img/' + str(i) + "/"  # ./img/1 ./img/2
                # 如果目录不存在的话则创建以当前页码为名称的目录
                if not os.path.isdir(my_dir):
                    os.makedirs(my_dir)
                # 获取当前记录中的图片地址
                pic_url = art.xpath("./div[2]/p/img/@src")[0]
                # 截取其中的图片名称
                pic_name = pic_url.split("/")
                # 取出图片名称
                pic_name = pic_name[-1]
                # 图片新的存储路径为 目录+图片名称
                pic_name = my_dir + pic_name
                # 发送请求
                pic_response = get_content(pic_url)
                # 获取二进制数据
                pic_content = pic_response.content
                # 打开一张图片
                with open(pic_name, 'wb') as f1:
                    # 写入一张图片
                    f1.write(pic_content)
                    # 关闭图片资源
                    f1.close()
                    print(pic_name + "下载完成。。。。")
        # 关闭文件
        f.close()
        print("第%s页数据保存完毕"%str(i))
    print("程序执行结束。。。")
标签: python, 爬虫

非特殊说明,本博所有文章均为博主原创。

评论啦~


点击这里给我发消息
召唤看板娘