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 除法小技巧
Sep 06 Python
Python中正则表达式详解
May 17 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
元组列表字典(莫烦python基础)
Apr 03 Python
python tkinter实现屏保程序
Jul 30 Python
Python socket聊天脚本代码实例
Jan 02 Python
什么是Python变量作用域
Jun 03 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
Python中tkinter的用户登录管理的实现
Apr 22 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记录页面停留时间的方法
2016/03/30 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python3 map函数和filter函数详解
2019/08/26 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
致全体运动员广播稿
2014/02/01 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书