python2爬取百度贴吧指定关键字和图片代码实例
作者:silence-cc 发布时间:2022-10-12 09:03:44
标签:python,爬取,百度,贴吧,关键字,图片
目的:在百度贴吧输入关键字和要查找的起始结束页,获取帖子里面楼主所发的图片
思路:
获取分页里面的帖子链接列表
获取帖子里面楼主所发的图片链接列表
保存图片到本地
注意事项:
问题:在谷歌浏览器使用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('下载结束!')
来源:https://www.cnblogs.com/silence-cc/p/9232989.html


猜你喜欢
- 一般在卸载完数据库时,大家都希望能够将注册表信息完全删干净,下面就将教您彻底删除SQL Server注册表的方法,供您参考。在卸载SQL S
- 在做项目的时候,遇到这样的数据:"trends": [ { &nb
- 领会下面这个示例吧,其实跟java中wait/nofity是一样一样的道理import threading# 条件变量,用于复杂的线程间同步
- 什么是DLL文件?DLL文件为动态链接库(英语: Dynamic-link library, 缩写为DLL)它是微软公司在微软视窗操作系统中
- 一、Xpath概述1、Xpath简介Xpath(XML Path Language) 是一门在 XML 文档中查找信息的语言,可以
- 如何侦测HTTP表头信息?可用下列办法侦测并显示所有的HTTP HEADERS:<HTML><HEAD><TI
- 从python2到python3,这两个版本可以说是从语法、编码等多个方面上都有很大的差别。为了不带入过多的累赘,Python 3.0在设计
- 本文实例讲述了JavaScript使用indexOf()实现数组去重的方法。分享给大家供大家参考,具体如下:数组去重方法有多中,这里列举出自
- 装tensorflow-gpu的时候经常遇到问题,自己装过几次,经常遇到相同或者类似的问题,所以打算记录一下,也希望对其他人有所帮助基本信息
- 前言我们在处理数据库的问题的时候,有时在数据库端看不到异常的等待,但是应用却报连接异常。这种情况,有可能是在压力还没有传递到数据库,在网络这
- 一下demo演示2.0中的vue-router是如何获取到不同参数的,并在地址栏中匹配不同的信息 <!DOCTYPE html>
- 更新多个对象例如说我们现在想要将Apress Publisher的名称由原来的”Apress”更改为”Apress Publishing”。
- 有时需要根据项目的实际需求向spider传递参数以控制spider的行为,比如说,根据用户提交的url来控制spider爬取的网站。在这种情
- ASP正则表达式,RegExp对象提供简单的正则表达式支持功能。RegExp对象的用法: Function RegExpTest(
- 前言最近发现有些东西长时间不用就要忘了,坚持每天复习总结一个小知识点吧~异常是什么呢?就是在代码执行过程中非预期的执行结果,随着代码越来越复
- 本文实例讲述了纯JavaScript实现的分页插件。分享给大家供大家参考。具体如下://总条数(必填)var Num=Number(<
- 测试代码:输出简单的ul li1.asp代码如下:<% response.write "<ul>" r
- 如下所示:sudo easy_install requests出现如图所示信息done即可愉快的使用 requests了来源:https:/
- 关于本地缓存1.wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSy
- 前言当我们需要安装python的第三方库时,通常都是打开cmd输入pip install xxx去安装。但是默认安装路径在C盘,极大占用空间