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

#coding=utf-8
import requests
from lxml import etree
import jsonclass Tieba:def __init__(self,tieba_name):self.tieba_name = tieba_name #接收贴吧名#设置为手机端的UAself.headers = {"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"}def get_total_url_list(self):'''获取所有的urllist'''url = "https://tieba.baidu.com/f?kw="+self.tieba_name+"&ie=utf-8&pn={}&"url_list = []for i in range(100): #通过循环拼接100个urlurl_list.append(url.format(i*50))return url_list #返回100个url的urllistdef parse_url(self,url):'''一个发送请求,获取响应,同时etree处理html'''print("parsing url:",url)response = requests.get(url,headers=self.headers,timeout=10) #发送请求html = response.content.decode() #获取html字符串html = etree.HTML(html) #获取element 类型的htmlreturn htmldef get_title_href(self,url):'''获取一个页面的title和href'''html = self.parse_url(url)li_temp_list = html.xpath("//li[@class='tl_shadow']") #分组,按照li标签分组total_items = []for i in li_temp_list: #遍历分组href = "https:"+i.xpath("./a/@href")[0] if len(i.xpath("./a/@href"))>0 else Nonetext = i.xpath("./a/div[1]/span[1]/text()")text = text[0] if len(text)>0 else Noneitem = dict(  #放入字典href = href,text = text)total_items.append(item)return total_items #返回一个页面所有的itemdef get_img(self,url):'''获取一个帖子里面的所有图片'''html = self.parse_url(url) #返回elemet累心的html,具有xpath方法img_list = html.xpath('//div[@data-class="BDE_Image"]/@data-url')img_list = [i.split("src=")[-1] for i in img_list] #提取图片的urlimg_list = [requests.utils.unquote(i) for i in img_list]return img_listdef save_item(self,item):'''保存一个item'''with open("teibatupian.txt","a") as f:f.write(json.dumps(item,ensure_ascii=False,indent=2))f.write("\n")def run(self):#1、找到了url规律,url listurl_list = self.get_total_url_list()for url in url_list:#2、遍历urllist 发送请求,获得响应,etree处理html# 3、提取title,hreftotal_item = self.get_title_href(url)for item in total_item:href = item["href"]img_list = self.get_img(href) #获取到了帖子的图片列表item["img"] = img_list# 4、保存到本地print(item)self.save_item(item)if __name__ == "__main__":tieba = Tieba("猫")tieba.run()

网络爬虫--12.【XPath实战】获取百度贴吧中的图片相关推荐

  1. 网络爬虫之Scrapy实战四:爬取网页下载图片

    在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片. 下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程: 1 首先需要在一个爬虫中,获取到图片的url并存 ...

  2. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  3. 【网络爬虫】给关键字获取百度知道搜索数据的网络爬虫

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 简单的通过关键字,爬出百度知道的一些搜索数据. 例如:问题,提问时间:答案文本,答案 ...

  4. Python教程:网络爬虫快速入门实战解析

    建议: 请在电脑的陪同下,阅读本文.本文以实战为主,阅读过程如稍有不适,还望多加练习. 网络爬虫简介 网络爬虫,也叫网络蜘蛛(Web Spider).它根据网页地址(URL)爬取网页内容,而网页地址( ...

  5. Python3网络爬虫快速入门实战解析

    Python3网络爬虫快速入门实战解析 标签: python网络爬虫 2017-09-28 14:48 6266人阅读 评论(34) 收藏 举报 分类: Python(26) 作者同类文章X 版权声明 ...

  6. Python3 网络爬虫快速入门实战解析

    点击上方"Python高校",关注 文末干货立马到手 作者:Jack Cui http://cuijiahua.com/blog/2017/10/spider_tutorial_1 ...

  7. beautifulsoup网页爬虫解析_Python3 网络爬虫快速入门实战解析

    点击上方"Python高校",关注 文末干货立马到手 作者:Jack Cui http://cuijiahua.com/blog/2017/10/spider_tutorial_1 ...

  8. python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)

    原标题:[实战练习]Python3网络爬虫快速入门实战解析(上) 摘要 使用python3学习网络爬虫,快速入门静态网站爬取和动态网站爬取 [ 前言 ] 强烈建议:请在电脑的陪同下,阅读本文.本文以实 ...

  9. 4.网络爬虫—Post请求(实战演示)

    网络爬虫-Post请求实战演示 POST请求 GET请求 POST请求和GET请求的区别 获取二进制数据 爬[百度官网](https://www.baidu.com/)logo实战 发送post请求 ...

最新文章

  1. 一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库
  2. 生成大小写字母加数字混合ID与自定义进制转换
  3. Autocad下载 安装 和谐 与 卸载
  4. 基于深度学习的图像语义分割技术概述之4常用方法
  5. 待字闺中之兄弟数字分析
  6. SECS/GEM series: Protocol Layer
  7. 能力提升综合题单Part 8.9.3 费用流
  8. 洛伦兹吸引子 matlab,使用Matplotlib画洛伦兹吸引子 | 学步园
  9. 2021年西式面点师(中级)考试题库及西式面点师(中级)考试试题
  10. 重新“推开世界的门”:4年过去了,VR还能复兴吗?
  11. (二)代理模式详解(包含原理详解)
  12. 【计算机网络】(一)走进网络
  13. ES6-Promise简介
  14. 联想air15和联想小新15有什么区别
  15. 使用ROS-I接口通过MoveIt包安装和操作ABB机器人
  16. 一颗椰子糖机器人_“媒体训练营”走进海南春光 聆听椰子糖诞生故事
  17. 浅谈ERP系统实施后如何完善企业内部控制制度建设
  18. Chromium命令行开关列表1
  19. 寓意深刻的18个故事
  20. Ansys Speos | 2023 R1版本新功能介绍

热门文章

  1. 25岁肥胖!美研究:晚年恐出现病态肥胖
  2. 从开源软件开发中体会到的心得
  3. 解决:idea - maven project 中 jar 报红线
  4. 动态规划 最长上升子序列
  5. 面向对象—的__new__()方法详解
  6. [Grid Layout] Place grid items on a grid using grid-column and grid-row
  7. 汇付 支付,痛苦的接入过程
  8. 表单PostGet两个长度限制问题的分析
  9. 数据结构之顺序队列和链式队列常用的一些操作
  10. 分享Spring Cloud分布式微服务架构图