python爬取资源网站资源
如果你想批量的获取整个网站的资源,逐个打开网页进行下载,那样子耗时又耗力,因此python爬虫可以代替人去自动完成下载任务。话不多说,直接见代码:
一、导入模板
import re
from bs4 import BeautifulSoup
import requests
二、设置请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.68 Safari/538.36'}response=requests.get(url,params=headers)if response.status_code==200:print("状态码成功")if "验证" in response.text:print("被验证")return Noneelse:return response.textelse:print("状态码失败"+str(response.status_code))
三、解析HTML文件
def parse_html(html,name):soup=BeautifulSoup(html,'lxml')results=soup.select(name)with open('黄图地址.txt','w') as f:for result in results:print(result['src'])f.write(result['src']+'\n')
四、运行
url='https://www.16df.xyz/pic/5/2020-01-10/25477.html'
html=get_html(url)
if html==None:print('none')pass
else:parse_html(html,name='img')
运行之后我们可以得到一个黄图地址.txt的文件
打开某一链接就会得到想要的美图
完整代打如下:
import re
from bs4 import BeautifulSoup
import requestsdef get_html(url):headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.68 Safari/538.36'}response=requests.get(url,params=headers)if response.status_code==200:print("状态码成功")if "验证" in response.text:print("被验证")return Noneelse:return response.textelse:print("状态码失败"+str(response.status_code))def parse_html(html,name):soup=BeautifulSoup(html,'lxml')results=soup.select(name)with open('黄图地址.txt','w') as f:for result in results:print(result['src'])f.write(result['src']+'\n')url='https://www.16df.xyz/pic/5/2020-01-10/25477.html'
html=get_html(url)
if html==None:print('none')pass
else:parse_html(html,name='img')
六、复盘(详细解读)
①请求头:
如果你直接在Python的编辑器中用get方法获取目标html文件,则服务器端会准确识别你为爬虫,很多网站有反爬措施,则会将你拒之门外,那么正确使用请求头则会在一定程度上避免这种不友好行为。但是目前很多服务器会识别你的请求头,也会将你拒之门外。我们可以使用代理来解决这种问题,对于绝大多数小型网站来说,只需要一个简单的请求头,则可以获取目标html文件。下图就是一个非常简单的请求头。
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.68 Safari/538.36'}response=requests.get(url,params=headers)
如果不知道请求头在哪里找,我们可以打开某一个网站,如下图,红圈内的代码即为请求头:
②获取html文件
首先,我们使用requests.get(url,params=headers)方法来获取目标html的信息。值得一提的是状态码。如果我们能正常访问网站的话,那么状态码即为200,如常见的404、405等即为不正确访问。
如果状态码为200时,我们就会获取目标html文件。
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.68 Safari/538.36'}response=requests.get(url,params=headers)if response.status_code==200:print("状态码成功")if "验证" in response.text:print("被验证")return Noneelse:return response.textelse:print("状态码失败"+str(response.status_code))
一般很多网站都会有反爬机制,在短时间内多次访问很有可能会被拒之门外,你获取的html文档则会是一堆无用的代码。所以可以使用上述代码来确定我们得到的代码是否被验证,是否为目标代码。值得注意的是,访问方式methods如果服务器指定只可以POST访问,则我们会获得405状态码,所以在这之前,我们需要知道网站的访问方式,根据methods来确定访问方式。
③解析html
pyhton的第三方库是非常强大的,如urllib、requests、re正则表达式用来获得html,如Beautiful Soup、XPath、pyquery等用来解析html。
def parse_html(html,name):soup=BeautifulSoup(html,'lxml')results=soup.select(name)with open('黄图地址.txt','w') as f:for result in results:print(result['src'])f.write(result['src']+'\n')
将BeautifulSoup(html,‘lxml’)实例化,然后使用soup.select()筛选器来获得我们想要的东西。熟练掌握html/css/javascript的,可以非常熟练的使用pyquery来筛选。一般常用的的格式如下:
Beautiful:
find_all(name,attrs,recursive,text,**kwargs)
XPath:
html.xpath(’//x/x’)
pyquery:
doc=pq(url)
doc(‘goal’)
re:
re.findall(‘goal’,html,…)
④保存目标资源
我们已经解析了html代码,那么就可以获得想要得到的资源,如图片,视频,链接等。如果资源太多的话,我们可以将获得的资源保存到数据库中。
此实例中,我们获取的是一大堆链接,打开链接,我么就可以看到图片。如果想要直接获取照片的话,我们可以利用以下代码来完成:
with open('黄图地址.txt','r')as f:readlines=f.readlines()lens=len(readlines)print(lens)for i in range(lens):url=readlines[i].rstrip()print(url)filename=str(i+1)+'.jpg'with open(filename,'wb')as f1:print("正在下载{}".format(i+1))f1.write(requests.get(url).content)print("下载完成")
接下来你就可以在所在文件的目录里看到照片一张接着一张被下载下来,再次就不再展示美图了。
完整代码:
import re
from bs4 import BeautifulSoup
import requestsdef get_html(url):headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.68 Safari/538.36'}response=requests.get(url,params=headers)if response.status_code==200:print("状态码成功")if "验证" in response.text:print("被验证")return Noneelse:return response.textelse:print("状态码失败"+str(response.status_code))def parse_html(html,name):soup=BeautifulSoup(html,'lxml')results=soup.select(name)with open('黄图地址.txt','w') as f:for result in results:print(result['src'])f.write(result['src']+'\n')url='https://www.16df.xyz/pic/5/2020-01-10/25477.html'
html=get_html(url)
if html==None:print('none')pass
else:parse_html(html,name='img')with open('黄图地址.txt','r')as f:readlines=f.readlines()lens=len(readlines)print(lens)for i in range(lens):url=readlines[i].rstrip()print(url)filename=str(i+1)+'.jpg'with open(filename,'wb')as f1:print("正在下载{}".format(i+1))f1.write(requests.get(url).content)print("下载完成")
**Thanks**
python爬取资源网站资源相关推荐
- python爬取小说网站资源_利用python的requests和BeautifulSoup库爬取小说网站内容
1. 什么是Requests?html Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库.python 它比urlli ...
- Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘
更多详情请查看Honker Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘 给大家推荐一款超好用的壁纸下载网站-- wallhaven 第一次知道这个网站的时候,惊为天 ...
- 使用Python爬取马蜂窝网站的游记和照片
使用Python爬取马蜂窝网站的游记和照片 特殊原因需要在马蜂窝上爬取一些游记和照片作为后续分析处理的数据,参考网上一些类似的爬虫文章,自己尝试了一下,这次爬取的是马蜂窝上所有有关苏州的游记(包括游记 ...
- Python爬取素材网站的音频文件
这篇文章主要介绍了基于Python爬取素材网站音频文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下,另外我建立了一个Python学习圈子群:115 ...
- python爬取电影网站存储于数据库_Python零基础爬虫教程(实战案例爬取电影网站资源链接)...
前言 好像没法添加链接,文中的链接只能复制到浏览器查看了 这篇是我写在csdn的,那里代码格式支持更好,文章链接 https://blog.csdn.net/d497465762/article/de ...
- python爬网站的题库_Python零基础爬虫教程(实战案例爬取电影网站资源链接)
前言 好像没法添加链接,文中的链接只能复制到浏览器查看了 这篇是我写在csdn的,那里代码格式支持更好,文章链接 https://blog.csdn.net/d497465762/article/de ...
- python爬取某网站高清二次元图片 自动下载
第一章 Python 爬取网站信息 文章目录 一,什么是爬虫? 二.使用步骤 1.引入库 2.伪装header 3.读取信息并过滤,写入文件 总结 前言 本文只做技术讨论,大家不要一直爬这个小网站,记 ...
- Python爬取小说网站下载小说
1前言 这个小程序是用来爬取小说网站的小说的,一般的盗版小说网站都是很好爬取的 因为这种网站基本没有反爬虫机制的,所以可以直接爬取 该小程序以该网站http://www.126shu.com/15/下 ...
- python爬取阿里巴巴网站实现
文章目录 1.杂谈 2.python爬虫的过程 3.代码分享 1.杂谈 好久没有更新我的博客了,那么问题来了,我干嘛去了,难道不爱分享了吗?不,我不是.真实情况是,我刚毕业,入职某互联网公司.因为 ...
- python爬虫真假网址,python爬取福利网站图片完整代码,懂得人都懂
网址需要自己替换懂的人都懂512*2,主要学习简单的爬虫,别乱用,否则后果自负! [Python] 纯文本查看 复制代码 import requests,bs4,re,os,threadingclas ...
最新文章
- Logstash 实践: 分布式系统的日志监控
- input的readonly属性与TextBox的ReadOnly和Enabled属性区别
- ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET
- 桶排序/Bucket Sort
- Xcode 静态库调试策略
- Scala学习(一):Scala简介与Hello World!
- lua mysql 存储类型_Lua学习----Lua基础数据类型
- Corporate Action Guidelines Terms
- Win10+Pytorch0.4.1版本+cuda一键安装
- CentOS 6.6上搭建C++运行环境
- Windows Server AppFabric与WCF
- c语言大作业酒店管理系统,管理信息系统大作业《酒店管理系统》.doc
- 关于Maven,这些应该够用了
- 大学生网课答案查询公众号搭建教程
- 【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
- 复习一下forearch
- 构建创新数字基础设施,中泰证券携手华为迈进数字化转型“快车道”
- 360点睛销售开放平台-身份认证-java版
- 安卓APP源码和设计报告——小说阅读器
- 量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程