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 数据库 (sqlite3)应用
Dec 07 Python
python difflib模块示例讲解
Sep 13 Python
django中forms组件的使用与注意
Jul 08 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
python元组的概念知识点
Nov 19 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
Python 字符串池化的前提
Jul 03 Python
python中Django文件上传方法详解
Aug 05 Python
Python编写nmap扫描工具
Jul 21 Python
python利用while求100内的整数和方式
Nov 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
杏林同学录(一)
2006/10/09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php生成图片验证码的方法
2016/04/15 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
python 写入csv乱码问题解决方法
2016/10/23 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
用python计算文件的MD5值
2020/12/23 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
父亲的菜园教学反思
2014/02/13 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
师德师风个人反思
2014/04/28 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书