from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import random
import os
import urllib.request
#把base_url随便改成别的贴吧的吧的首页都行
base_url = "https://tie"
num=0
for i in range(0,50):#爬取50页
#这地方写的不对,因该用正则提取后面的pn
#下面在加一个判断,是否你贴入的base_url是首页.因为首页后面没有&pn处理不同:
a=re.findall(".*&pn",base_url)
shumu=50*i
print ('正在爬取第'+str(i+1)+'页的所有帖子里面的图片')
if a==[]:
#那么我们就加入&pn=...
url=base_url+'&pn='+str(shumu)
else:
url=base_url+str(shumu)

#把url地址里面的东西读出来给soup
try:#用try来解决有时候编码utf-8不好使的问题
html = urlopen(url).read().decode('utf-8')
except Exception:
continue
soup = BeautifulSoup(html, features='lxml')
#把地址里面的每一个页码地址都取出来
#这个正则表达式表示开头必须是/p的,里面有/p后很多数字的,(?=)这个叫断言,利用这个来加限制条件
#继续搞一个贪婪匹配和非贪婪匹配的区别 .*?5表示非贪婪匹配 235235会出来2个235 .*5是贪婪匹配235235会出来235235
sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/p)/p/\d*")})

for i in range(len(sub_urls)):
a=sub_urls[i]['href']#利用这个方式提取一个网址里面的href

#这里面每一个a就是要爬取的网页
#下面开始爬取他的图片
baseurl='https://tieba.baidu.com'
url=baseurl+str(a)
try:
html = urlopen(url).read().decode('utf-8')
except Exception:
continue
soup = BeautifulSoup(html, features='lxml')

#soup里面进入标签的方法是.标签就行了所谓标签就是<a>...<\a>这里面东西就是a标签里面的内容

tupian=soup.cc


#继续加一个功能如果需要保存到的dir不存在就生成,存在就pass
aaa=os.path.exists('d:/tupian')
if aaa!=True:
os.makedirs('d:/tupian')
#先设置一下保存的位置:
dir=r'D:\tupian'

#这个目录先自己手动创立一下
#然后直接find img get src但是有的cc里面没有图片

try:
if tupian!=None and tupian.find_all('img')!=None:
img_srcall = tupian.find_all('img')
#注意find的话后面可以直接.get find_all后面不能直接.get


for _ in img_srcall:
#这个pic_name还必须要写一个拓展名
img_src=_.get('src')
#继续再加个判断只下载有size的图片,这样就跳过了图标文件
a=_.get('size')
#这个get方法真心好用,他的效果是如有有size这个属性我们
#就返回他,否则我们返回None,永远不会报错的.

if a!=None and int(a)>30000:
pic_name=str(num)
pic_name=pic_name+img_src[-4:]
pic_name=os.path.join(dir,pic_name)
urllib.request.urlretrieve(img_src, pic_name)

num+=1
except Exception:
continue


##
##
##
##his = ["/item/%E9%B8%A1%E7%9F%A2%E8%97%A4/931175?fromtitle=%E9%B8%A1%E5%B1%8E%E8%97%A4&fromid=374872"]
##
##for i in range(200):
## url = base_url + his[-1]
##
##print (77777777)
##
##html = urlopen(url).read().decode('utf-8')
##print (8888888888)
##soup = BeautifulSoup(html, features='lxml')
##print (9999999)
##
##print(i, soup.find('h1').get_text(), ' url: ',base_url+ his[-1])
##
### find valid urls
##sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("(?=^/item)/item/(%.{2})+$")})
##
##
##print ('爬到了'+str(i+1))
##if len(sub_urls) != 0 :
##
## his.append(random.sample(sub_urls, 1)[0]['href'])
##else:
## if len(his)==1:
## pass
## else:
### no valid sub link found
## his.pop()

 

继续修改爬虫百度贴吧,这次随意贴吧的任何一个index页都行,然后自动d盘生成tupian文件夹来保存的更多相关文章

  1. vue项目打包,生成dist文件夹,如何修改文件夹的名字

    vue项目打包之后的dist文件目录是如下 如果想要修改dist或则static文件名称,需要打开config / index.js build: { // Template for index.ht ...

  2. 树莓派Ubuntu 16.04 MATA系统 修改用户文件夹名后,提示configure it with blueman-service

    自从修改了树莓派的Ubuntu 16.04 MATA 系统的 /home/ 下的用户文件夹名后,使用vncserver远程操作,看到桌面每次都提示 Configured directory for i ...

  3. 在Outlook中修改脱机文件(.ost)的保存位置

    方法一 少读者所在公司的邮箱客户端都在使用微软 Exchange Server 的“缓存 Exchange 模式”.Outlook会默认将脱机文件(.ost文件)保存在C盘上. 但很多读者不希望Out ...

  4. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  5. Java开发新闻管理系统(前后端)+爬虫百度、新浪等新闻

                  ForFuture News  新闻管理系统                      项目演示地址:http://www.ganquanzhong.top [注]:文档下 ...

  6. Python爬虫抓取糗百的图片,并存储在本地文件夹

    思路: 1.观察网页,找到img标签 2.通过requests和BS库来提取网页中的img标签 3.抓取img标签后,再把里面的src给提取出来,接下来就可以下载图片了 4.通过urllib的urll ...

  7. windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

    原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...

  8. 小小知识点(二)——如何修改win10 的C盘中用户下的文件夹名称

    1.以管理员身份登录计算机 在win10桌面的开始界面处有个用户头像,点击在里面找到administrator: 如果没有,则需进行如下设置: (1)右键计算机,双击管理,找到如下所示的用户中的adm ...

  9. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

随机推荐

  1. shell语法(二)

    Shell脚本语法 条件测试:test. [ ] 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1 ...

  2. UVA-839-二叉树-一个有意思的题目

    题意: 一颗二叉树可以看成一个杠杆,左右俩边有重量,有到支点长度,判断整个树是否平衡(根据杠杆原理),如果当前结点有左孩子,那么当前左边的重量就是左孩子的总和,右边同理 递归,发现scanf和cin的 ...

  3. windows10系统telnet登陆

    参考网站:https://jingyan.baidu.com/article/acf728fd498e9ff8e510a322.html windows10系统以及没有telnet服务器端了. 需要单 ...

  4. sqoop1的安装以及数据导入导出测试

    下载 wget http://mirror.bit.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 解压 tar -zxf ...

  5. 【原】解决Debug JDK source 无法查看局部变量的问题方案(重新编译rt.jar包)

    一.问题阐述 首先我们要明白JDK source为什么在debug的时候无法观察局部变量,因为在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值 ...

  6. c++builder XE6 线程 tthread

    thread TThread class TSleepFunc : public TCppInterfacedObject<TProc> { public: TSleepFunc(TFor ...

  7. Axel与Wget下载工具

    Axel工具是linux下的http/ftp中强大下载工具,支持多线程和断点续传下载.且可以从多个地址或者从一个地址的多个连接来下载同一个文件. 常用的选项: [root@wjoyxt ~]# axe ...

  8. linux中与Oracle有关的内核参数详解

    工作当中遇到oracle运行时CPU占用率达到90%以上,调小以下参数值后恢复正常. fs.file-max = 65536 net.core.rmem_default=262144 net.core ...

  9. linux——DNS服务器配置

    讲课,请不要在课堂上查找文件,浏览器搜索,会感觉你很不上心,玩听众,一定提前做很多遍,模拟很多遍: 演讲,请务必准备好材料,考虑听众的感受,一定不要让外行人云里雾里,听不懂你在讲什么,那就尴尬了, D ...

  10. Redis cli 操作

    备份 root@575e8088b5fb:/data# redis-cli LASTSAVE(integer) 1500273743root@575e8088b5fb:/data# redis-cli ...