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 25 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
单链表反转python实现代码示例
Feb 08 Python
pip安装python库的方法总结
Aug 02 Python
Python调用.NET库的方法步骤
Dec 27 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python守护进程用法实例分析
2015/06/04 Python
python机器学习实战之树回归详解
2017/12/20 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
团队精神演讲稿
2013/12/31 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
农业项目建议书
2014/08/25 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers