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下的多进程编程
Apr 28 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
python和c语言的主要区别总结
Jul 07 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
python matplotlib折线图样式实现过程
Nov 04 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
mac使用python识别图形验证码功能
Jan 10 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 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中定时计划任务的实现原理
2013/01/08 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
python实现学员管理系统
2019/02/26 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
EJB的激活机制
2013/10/25 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
保险公司年会主持词
2014/03/22 职场文书
八项规定对照检查材料
2014/08/31 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
2014年组织部工作总结
2014/11/14 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL