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文件和目录操作方法大全(含实例)
Mar 12 Python
使用python开发vim插件及心得分享
Nov 04 Python
在Python中操作字典之update()方法的使用
May 22 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 Python
Python内置数据类型中的集合详解
Mar 18 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生成文件
2007/01/15 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python实现端口检测的方法
2018/07/24 Python
python实现排序算法解析
2018/09/08 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
python多线程分块读取文件
2019/08/29 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
春节联欢晚会主持词范文
2014/03/24 职场文书
实习协议书范本
2014/04/22 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
教育见习报告范文
2014/11/03 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
2014年校务公开工作总结
2014/12/18 职场文书