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动态加载模块的3种方法
Nov 22 Python
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
python网络编程之文件下载实例分析
May 20 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
详解Python核心对象类型字符串
Feb 11 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python如何实现视频转代码视频
Jun 17 Python
详解Django 时间与时区设置问题
Jul 23 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 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
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
php对数组排序的简单实例
2013/12/25 PHP
js去除空格的12种实用方法
2013/11/08 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
python中使用序列的方法
2015/08/03 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python中加背景音乐如何操作
2020/07/19 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
护理专科毕业推荐信
2013/11/10 职场文书
函授毕业生的自我鉴定
2013/11/26 职场文书
银行存款证明样本
2014/01/17 职场文书
房产代理公证处委托书
2014/04/04 职场文书
《长征》教学反思
2014/04/27 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
汽车转让协议书范本
2014/12/07 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
Python中requests库的用法详解
2022/06/05 Python