一文看懂Python 爬虫 进阶(三)

文章目录

  • 一文看懂Python 爬虫 进阶(三)
    • **猫眼电影(xpath)**
    • **链家二手房案例(xpath)**
    • **百度贴吧图片抓取**
  • 这篇几乎都是代码
  • 这里的代码有些我为了图简单User-Agent我写的很简单,大家运行的时候最好去浏览器里去复制一个

猫眼电影(xpath)

  • 目标
 1、地址: 猫眼电影 - 榜单 - top100榜2、目标: 电影名称、主演、上映时间
  • 步骤
1、确定是否为静态页面(右键-查看网页源代码,搜索关键字确认)
2、写xpath表达式
3、写程序框架
  • xpath表达式
1、基准xpath: 匹配所有电影信息的节点对象列表//dl[@class="board-wrapper"]/dd2、遍历对象列表,依次获取每个电影信息for dd in dd_list:电影名称 :dd.xpath('./a/@title')[0].strip()电影主演 :dd.xpath('.//p[@class="star"]/text()')[0].strip()上映时间 :dd.xpath('.//p[@class="releasetime"]/text()')[0].strip()
  • 代码实现(修改之前urllib库代码)
1、将urllib库改为requests模块实现
2、改写parse_page()方法
import requests
from lxml import etree
import time
import randomclass MaoyanSpider(object):def __init__(self):self.url = 'https://maoyan.com/board/4?offset={}'self.headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}# 添加计数(页数)self.page = 1# 获取页面def get_page(self,url):# random.choice一定要写在这里,每次请求都会随机选择res = requests.get(url,headers=self.headers)res.encoding = 'utf-8'html = res.textself.parse_page(html)# 解析页面def parse_page(self,html):# 创建解析对象parse_html = etree.HTML(html)# 基准xpath节点对象列表dd_list = parse_html.xpath('//dl[@class="board-wrapper"]/dd')movie_dict = {}# 依次遍历每个节点对象,提取数据for dd in dd_list:movie_dict['name'] = dd.xpath('.//p/a/@title')[0].strip()movie_dict['star'] = dd.xpath('.//p[@class="star"]/text()')[0].strip()movie_dict['time'] = dd.xpath('.//p[@class="releasetime"]/text()')[0].strip()print(movie_dict)# 主函数def main(self):for offset in range(0,31,10):url = self.url.format(str(offset))self.get_page(url)print('第%d页完成' % self.page)time.sleep(random.randint(1,3))self.page += 1if __name__ == '__main__':spider = MaoyanSpider()spider.main()

链家二手房案例(xpath)


(好吧 我是武汉的)

  • 实现步骤

1. 确定是否为静态

打开二手房页面 -> 查看网页源码 -> 搜索关键字
  1. xpath表达式
1、修改方法: 右键 -> copy xpath -> 测试修改
2、基准xpath表达式(匹配每个房源信息节点列表)//ul[@class="sellListContent"]/li[@class="clear LOGCLICKDATA"] | //ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]
3、依次遍历后每个房源信息xpath表达式* 名称: .//a[@data-el="region"]/text()* 总价: .//div[@class="totalPrice"]/span/text()* 单价: .//div[@class="unitPrice"]/span/text()
  1. 代码实现
import requests
from lxml import etree
import timeclass LianjiaSpider(object):def __init__(self):self.url = 'https://wh.lianjia.com/ershoufang/pg{}/'self.headers = {'User-Agent' : 'Mozilla/5.0'}def get_page(self,url):res = requests.get(url,headers=self.headers,timeout=10)res.encoding = 'utf-8'html = res.textself.parse_page(html)def parse_page(self,html):parse_html = etree.HTML(html)# 基准xpathli_list = parse_html.xpath('//ul[@class="sellListContent"]/li[@class="clear LOGCLICKDATA"] | //ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]')print(len(li_list))house_dict = {}# 遍历依次匹配每个房源信息for li in li_list:house_dict['house_name'] = li.xpath('.//a[@data-el="region"]/text()')[0].strip()house_dict['total_price'] = li.xpath('.//div[@class="totalPrice"]/span/text()')[0].strip()house_dict['unit_price'] = li.xpath('.//div[@class="unitPrice"]/span/text()')[0].strip()print(house_dict)def main(self):for pg in range(1,4):url = self.url.format(str(pg))self.get_page(url)print('第%d页爬取成功' % pg)time.sleep(0.5)if __name__ == '__main__':spider = LianjiaSpider()spider.main()

百度贴吧图片抓取

  • 目标
抓取指定贴吧所有图片
  • 思路
1、获取贴吧主页URL,下一页,找到不同页的URL规律
2、获取1页中所有帖子URL地址: [帖子链接1,帖子链接2,...]
3、对每个帖子链接发请求,获取图片URL
4、向图片的URL发请求,以wb方式写入本地文件
  • 实现步骤
  1. 贴吧URL规律
http://tieba.baidu.com/f?kw=??&pn=50
  1. xpath表达式
1、帖子链接xpath//*[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div/div[2]/div[1]/div[1]/a/@href2、图片链接xpath//div[@class="d_post_content j_d_post_content  clearfix"]/img[@class="BDE_Image"]/@src3、视频链接xpath//div[@class="video_src_wrapper"]/embed/@data-video# 注意: 此处视频链接前端对响应内容做了处理,需要查看网页源代码来查看,复制HTML代码在线格式化
  1. 代码实现
import requests
from urllib import parse
from lxml import etreeclass BaiduImgSpider(object):def __init__(self):self.url = 'http://tieba.baidu.com/f?{}'self.headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'}# 获取帖子链接def get_tlink(self,url):html = requests.get(url,headers=self.headers).text# 提取帖子链接parse_html = etree.HTML(html)tlink_list = parse_html.xpath('//*[@id="thread_list"]/li[@class=" j_thread_list clearfix"]/div/div[2]/div[1]/div[1]/a/@href')# tlink_list: ['/p/23234','/p/9032323']for tlink in tlink_list:t_url = 'http://tieba.baidu.com' + tlink# 提取图片链接并保存self.get_imglink(t_url)# 获取图片链接def get_imglink(self,t_url):res = requests.get(t_url,headers=self.headers)res.encoding = 'utf-8'html = res.text# 提取图片链接parse_html = etree.HTML(html)# 匹配图片和视频的xpath表达式,中间加或 |imglink_list = parse_html.xpath('//*[@class="d_post_content j_d_post_content  clearfix"]/img/@src | //div[@class="video_src_wrapper"]/embed/@data-video')for imglink in imglink_list:self.write_img(imglink)# 保存图片def write_img(self,imglink):res = requests.get(imglink,headers=self.headers)# 切取链接的后10位作为文件名filename = imglink[-10:]with open(filename,'wb') as f:f.write(res.content)print('%s下载成功' % filename)# 指定贴吧名称,起始页和终止页,爬取图片def main(self):name = input('请输入贴吧名:')begin = int(input('请输入起始页:'))end = int(input('请输入终止页:'))for page in range(begin,end+1):# 查询参数编码params = {'kw' : name,'pn' : str( (page-1)*50 )}params = parse.urlencode(params)url = self.url.format(params)# 开始获取图片self.get_tlink(url)if __name__ == '__main__':spider = BaiduImgSpider()spider.main()
  • 看到这里,恭喜,你可以去爬取一些你想要的图片和信息了

一文看懂Python 爬虫 进阶(三)相关推荐

  1. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  2. 一文看懂Python collections模块的高效数据类型

    原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...

  3. 一文看懂Python多进程与多线程编程(工作学习面试必读)

    进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...

  4. Python 爬虫进阶三之 Scrapy 框架安装配置

    初级的爬虫我们利用 urllib 和 urllib2 库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架 Scrapy,这安装过程也是煞费苦心哪,在此整理如下. 官网 官方安装文档 安装p ...

  5. 看懂Python爬虫框架,所见即所得一切皆有可能

    文章目录 内容介绍 Scrapy爬虫框架 内容介绍 说起Python爬虫,非数据分析或是专业的爬虫工程师都会使用爬虫框架,其中包括 Scrapy.Crawley.Portia.newspaper 等等 ...

  6. 一文看懂Python(三)-----字典篇

    字典不同于列表.元组和字符串,列表.元组和字符串可以概括为序列类型,有以下特点: 1.都可以通过索引得到每一个元素 2.默认索引值总是从0开始 3.可以通过切片的方法得到一个范围内的元素集合 4.有很 ...

  7. 一文看懂Python(五)-----文件篇

    一.前言 文件操作在所有编程语言中都扮演着一个非常重要的角色,编程语言中的文件操作都大同小异,无非就是读取和写入,本文会详细介绍Python的相关文件操作,包括常用的方法.方法如何使用.一些小的案例以 ...

  8. c 提取引号中间的字符串_Python | 一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力. 列表.元组.字符串都属于序列 ...

  9. python运行程序-一文看懂python程序的执行过程

    本文主要介绍的是python程序的执行过程,首先介绍的是编译过程,其次介绍的是过程图解及编译字节码,最后介绍了codeobject对象的属性,具体的跟随小编一起来了解一下. 一.编译过程概述 当我们执 ...

最新文章

  1. 港大正式启动全球招聘学术人才,计划延揽百位世界级杰出学者
  2. 5天5000万访问的个人网站是如何诞生的?
  3. 成功解决AttributeError: module 'tensorflow' has no attribute 'merge_all_summaries'
  4. search string iteration
  5. Git学习笔记:分支管理(2)
  6. python自定义函数找最大值_python – 查找用户定义函数的局部最大值和最小值
  7. webstorm中nodejs代码提示
  8. linux上php指向mysql_linux环境下 php如何配置mysql
  9. zoj1095 Humble Numbers(DP)
  10. mysql存放lng lat_使用空间点类型在MySQL中存储Lat Lng值
  11. LeetCode ——24. 两两交换链表中的节点
  12. 关于软件比赛:想当太子,就不要陪别人读书
  13. android特殊用法(转)
  14. opencv打开双目,采集标定双目的图片
  15. [编程思想] POP OOP AOP
  16. 计算机基础知识测试1,计算机基础知识测试试题及答案(网络)1
  17. python 实现微信自动回复(自动聊天)
  18. k8s 偏向运维技术 ,后端程序员为什么要学习k8s?
  19. 3dmax 2016 2015 2014 2013 vary渲染 视频教程 从入门到精通
  20. 职场新人如何发公司内部邮件

热门文章

  1. Altium Designer 一键删除一整条线(ad删除整条布线)
  2. C++类和结构体的区别
  3. XSSFWorkbook读取excel模版写入数据过多造成OOM,使用SXSSFWorkbook解决
  4. Opengl中的TBN矩阵的计算和使用
  5. js 纯canvas实现横纵双向关系图
  6. 5.5浮点数运算方法和浮点数运算器
  7. 网页自动获取题目匹配题库答案填充(原创1.0)
  8. Spring总结pt4
  9. 【free】哪里可以免费下载草图大师模型?哪里有草图大师免费教程下载
  10. 我国AGV工业编年史(图谱)从1975年第一台磁导航AGV开始