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虚拟环境virtualenv的安装与使用详解
May 28 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
python机器人运动范围问题的解答
Apr 29 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Python  Django 母版和继承解析
Aug 09 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
python实现图片转换成素描和漫画格式
Aug 19 Python
用Python提取PDF表格的方法
Apr 11 Python
python中subplot大小的设置步骤
Jun 28 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
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
个人找工作的自我评价
2013/10/17 职场文书
出国留学自荐信
2013/10/25 职场文书
铁路个人事迹材料
2014/01/30 职场文书
公司总经理岗位职责
2014/03/15 职场文书
竞聘书格式及范文
2014/03/31 职场文书
商务英语专业求职信
2014/06/26 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
企业百日安全活动总结
2015/05/07 职场文书
电影开国大典观后感
2015/06/04 职场文书
运动员代表致辞
2015/07/29 职场文书
详解Go语言中Get/Post请求测试
2022/06/01 Golang