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 23 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python获取邮件地址的方法
Jul 10 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
python 消费 kafka 数据教程
Dec 21 Python
python关于调用函数外的变量实例
Dec 26 Python
Python 高效编程技巧分享
Sep 10 Python
python保存图片的四个常用方法
Feb 28 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
分享php邮件管理器源码
2016/01/06 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
初始Nodejs
2014/11/08 NodeJs
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
python Flask实现restful api service
2017/12/04 Python
Django中Model的使用方法教程
2018/03/07 Python
Python封装原理与实现方法详解
2018/08/28 Python
python二进制文件的转译详解
2019/07/03 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
暑假家长评语大全
2014/04/17 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android