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实现的各种排序算法代码
Mar 04 Python
Python中的ConfigParser模块使用详解
May 04 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python 轮询执行某函数的2种方式
May 03 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
python 动态绘制爱心的示例
Sep 27 Python
python实现经典排序算法的示例代码
Feb 07 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php 删除数组元素
2009/01/16 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
如何让CI框架支持service层
2014/10/29 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php的4种常用运行方式详解
2016/12/22 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python画图常规设置方式
2020/03/05 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
纺织工程专业个人求职信范文
2014/01/27 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
如何在C++中调用Python
2021/05/21 Python