|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hello? 于 2022-8-10 23:33 编辑
这种爬取图片的爬虫相信大家见过很多,网上一大片,这个爬虫就是存粹练手的 ,没什么用处,大家看看就行,支持一下新手
第一次自己动手写爬虫程序,没学正则表达式和xpath,用的美丽汤,代码我自己都看着不爽
简单介绍:就纯粹爬取图片的程序,支持翻页。
代码:
- import requests
- import urllib.request as u
- import random
- import os
- import easygui as g
- from bs4 import BeautifulSoup as Be
- #代理ip,opener
- #选择ip,大家这里可以去网上找其他的来添加或替换
- ip=['101.200.127.149:3129','58.20.184.187:9091',\
- '58.20.184.187:9091','183.247.211.156:30001']
- ip_=random.choice(ip)
- #创建opener
- proxy=u.ProxyHandler({'http':ip_})
- opener=u.build_opener(proxy)
- u.install_opener(opener)
- #创建header
- cookie="Hm_lvt_1060da23a20238049f3e377d46f7e478=1659877599,1659878742,1659879750,1659881285; wordpress_test_cookie=WP+C\
- ookie+check; wordpress_logged_in_5e2cce81a5cb57f53e7a18f30edb5d19=SabcdA%7C1660227358%7COXd1geMvZGlSUSNWmLzSOkWwgHgBn08Q\
- HsN6d8GHTJX%7C4ad51d29c9079db9fb51437058bc588ff447ff4feeafab407674fdca82ffbd71; Hm_lpvt_1060da23a20238049f3e377d46f7e478=1660059440"
- headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
- (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"
- ,"cookie":cookie}
- url_base='https://www.xiurenwang.cc/bang/'#这个网址是秀人网的主页面,翻页时候要用到
- url_true='https://www.xiurenwang.cc/'#这个网址是拼接图集网址时用到的
- #开始
- hou=[]#储存图集地址要和'https://www.xiurenwang.cc/'进行拼接
- url_xo=[]#用于储存图集地址的
- photo_url=[]#用于储存每个图集中每个图片的地址
- def get_hou():
- #常规操作,定制soup
- response=requests.get(url_base,headers=headers)
- content=response.content.decode('utf-8')#格式uff-8
- soup=Be(content,'lxml')
- #寻找标签
- a_list=soup.find_all("a",class_="img")
- #存放标签内容
- #这个标签内容就是每个图集地址,需要拼接
- for each in a_list:
- hou.append(each['href'])
- def save_url_xo():
- #这个函数用于拼接,其实两个函数可以合二为一,我也不知道当时自己为什么要这么做
- for each in hou:
- url_1=url_true+each[1:]
- url_xo.append(url_1)#将每个图集的地址拼接好后存放在url_xo里
- def get_xxoo(url_xo_):#url_xo_指的是url_xo里的每个元素(见下面代码中while里的for循环)
- #url_xo存放的是每个图集的地址
-
- #常规操作,soup
- response=requests.get(url_xo_,headers=headers)
- content=response.content.decode('utf-8')
- soup=Be(content,'lxml')
- #这是个重点,要获取子标签,因为子标签名字是a,然而网页源代码里名字为a的有很多
- #需要获取的就是这个标签下的a标签
- d_list=soup.find("div",id="image").children
- #下面3句是为了去掉列表开头没用的元素
- t_list=list(d_list)
- end=len(t_list)
- t_list=t_list[1:end-1]
- for each in t_list:
- href=each['href']
- photo_url.append(href)
- #这个for循环是将t_list里标签的href属性值提取出来并存入photo_url
- #这个属性值就是每张图片的地址
- len_ph=len(photo_url)
- down_index=1
- #这两句就是为后面print进度做的
- name=0 #这个是为了取图片名字用的,还有i也是,i就是下面代码while里的for循环里的
- for each in photo_url:
- xxoo=requests.get(each).content
- #这里也很关键,由于每张图片地址里面都有中文,所以用.comtent需要转换格式
- name_jpg=file+'\\'+str(i)+'.'+str(name)+'.jpg'
- with open(name_jpg,'wb')as f:
- f.write(xxoo)
- print(f"{name_jpg}已下载,进度:{down_index}/{len_ph}")
- name+=1
- down_index+=1
- #这里的两个变量其实重复了,多此亿举,写注释才发现
- #下面的没什么好说的
- #就是url_base和url_true两个网址的区别,你去看了秀人网就知道了【手动狗头】
- while True:
- page=1
- inp=input(f"是否下载第{page}页图片?(Y/N):")
- if page!=1:
- url_base='https://www.xiurenwang.cc/bang/'+'page/'+str(page)
- if inp=="Y":
- file=g.filesavebox(msg="选择文件夹",title="另存为")
- os.mkdir(file)
- get_hou()
- save_url_xo()
- for i in range(len(url_xo)):
- photo_url=[]
- get_xxoo(url_xo[i])
- else:
- break
- page+=1
-
-
-
复制代码
欢迎大佬萌提建议
顺便谢谢大佬萌一直以来对我的帮助
|
|