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复制文件代码实现
Dec 23 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
python中数据库like模糊查询方式
Mar 02 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
python中如何设置代码自动提示
Jul 15 Python
python 如何实现遗传算法
Sep 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 字符串替换的方法
2012/01/10 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
python 调整图片亮度的示例
2020/12/03 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
python爬取微博评论的实例讲解
2021/01/15 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
在职研究生自我鉴定
2013/10/16 职场文书
清洁工表扬信
2014/01/08 职场文书
简单的辞职信范文
2014/01/18 职场文书
霸气队列口号
2014/06/18 职场文书
政府四风问题整改措施
2014/10/04 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
销售开票员岗位职责
2015/04/15 职场文书