python2爬取百度贴吧指定关键字和图片代码实例


Posted in Python onAugust 14, 2019

目的:在百度贴吧输入关键字和要查找的起始结束页,获取帖子里面楼主所发的图片

思路:

  • 获取分页里面的帖子链接列表
  • 获取帖子里面楼主所发的图片链接列表
  • 保存图片到本地

注意事项:

  • 问题:在谷歌浏览器使用xpath helper插件时有匹配结果,但在程序里面使用python内带的xpath匹配却为空的原因。
  • 原因:不同服务器会对不同的浏览器返回不同的数据,导致在谷歌浏览器看到的和服务器返回的有区别
  • 解决方法:使用IE浏览器的User-agenet,而且越老的版本,报错几率相对越小
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
import urllib
import os
from lxml import etree
keyword = raw_input('请输入要查询的关键字: ')

keyword = {'kw':keyword}

kw = urllib.urlencode(keyword)

startpage = raw_input('请输入开始页数: ')

endpage = raw_input('请输入结束页数: ')

url = 'https://tieba.baidu.com/f' + '?' + kw

print('开始下载...')
# 计算下载的图片个数,注意:变量n如放在最外层循环,可以统计每个分页图片个数
n = 0
# 获取分页里面帖子链接列表,获取每个帖子里楼主所发的图片链接列表,保存图片
# 获取帖子链接列表
for page in range(int(startpage),int(endpage)+1):
    pnumber = {'pn': str((page - 1)*50)}
    pnumber = urllib.urlencode(pnumber)
    fullurl = url + '&' + pnumber
    # 发现使用谷歌浏览器的User-Agent,会导致后面的xpath匹配结果有时为空。原因:服务器会对不同的浏览器发出的同一请求返回不同格式的数据,此时返回的数据和在谷歌浏览器里面看到的数据不同。
    # 解决办法:使用IE浏览器的User-Agent,因为IE的相对来说更标准,而且版本越老问题越少。
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"}
    request = urllib2.Request(fullurl,headers=headers)
    response = urllib2.urlopen(request)
    html = response.read()

    # 解析html 为 HTML DOM文档
    content = etree.HTML(html)
    # xpath使用下面括号内容进行匹配,使用a的属性使用了class='j_th_tit'去过滤广告则匹配结果为空;换成a的属性rel="noreferrer"就解决。为啥换不清楚。思路,这个属性不行换个属性。
    # 获取每个分页里面的帖子的链接列表
    link_list = content.xpath('//div[@class="threadlist_lz clearfix"]/div/a[@rel="noreferrer"]/@href')
    # 获取该帖子楼主所发的图片链接列表
    for link in link_list:
      link = 'https://tieba.baidu.com' + link 
      request2 = urllib2.Request(link,headers=headers)
      response2 = urllib2.urlopen(request2)
      html2 = response2.read()

      # 把html字符串解析为html dom
      content2 = etree.HTML(html2)

      # 使用xpath匹配其里面层主所发的图片的链接
      link_list2 = content2.xpath('//img[@class="BDE_Image"]/@src')

      # 遍历图片链接列表,保存图片到文件夹images内
      for link2 in link_list2:

        request3 = urllib2.Request(link2,headers=headers)
        response3 = urllib2.urlopen(request3)
        html3 = response3.read()
        # 指定文件名
        filename = link2[-10:]
        n += 1
        print('正在保存第 %3d 张图片'%n)

        # html3为返回的图片内容,把图片写入images2文件夹内
        with open('images' + '/' + filename,'wb') as f:
          f.write(html3)

print('下载结束!')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python strip()函数 介绍
May 24 Python
Django自定义分页效果
Jun 27 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
深入理解Python异常处理的哲学
Feb 01 Python
pytorch 自定义参数不更新方式
Jan 06 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python如何合并多个字典或映射
Jul 24 Python
python中threading和queue库实现多线程编程
Feb 06 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
python提取照片坐标信息的实例代码
Aug 14 #Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 #Python
详解用python计算阶乘的几种方法
Aug 14 #Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 #Python
用Python抢火车票的简单小程序实现解析
Aug 14 #Python
Python定时任务随机时间执行的实现方法
Aug 14 #Python
查看Python依赖包及其版本号信息的方法
Aug 13 #Python
You might like
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
同居协议书范本
2014/04/23 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
通讯稿范文
2015/07/22 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
Mysql Show Profile
2021/04/05 MySQL
MySql开发之自动同步表结构
2021/05/28 MySQL
Django模型层实现多表关系创建和多表操作
2021/07/21 Python