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中文件变化监控示例(watchdog)
Oct 16 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
详解Python调用系统命令的六种方法
Jan 28 Python
python 将Excel转Word的示例
Mar 02 Python
Python编写冷笑话生成器
Apr 20 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
优化使用mysql存储session的php代码
2008/01/10 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
php连接mysql数据库
2017/03/21 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python比较2个xml内容的方法
2015/05/11 Python
python中map()函数的使用方法示例
2017/09/29 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python使用PyQt5的简单方法
2019/02/27 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
毕业生找工作推荐信
2013/11/21 职场文书
财政专业求职信范文
2014/02/19 职场文书
女儿满月酒致辞
2015/07/29 职场文书
领导离职感言
2015/08/03 职场文书
信息技术国培研修日志
2015/11/13 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python