初级概述
本周呢,我运用Python的request、pyquery和os库,对于网站上的的图片进行爬取、命名存储。向Python数据分析迈向一步。
代码功能
- 用户按照需要输入自己想要爬取的网站
但是光输入网站是不行的,因为不同网站的HTML语言不同,图片存放的具体位置定也不同,对于函数也要更改 - 用户输入想要存取的文件名
- 执行即可生成
代码展示
1.导入库,第三方库需要自己install
import requests
from pyquery import PyQuery #数据解析
import os
2.获取请求函数
#请求网络获取服务器数据
def get_requests(url):
# 请求头--模拟浏览器--隐藏爬虫身份--设置UA即User-Agent
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
}
'''
headers = {
#请求头例子
'Referer': 'https://www.mzitu.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3',
'Upgrade-Insecure-Requests': '1'
}
'''
html = requests.get(url=url, headers=headers).content.decode('utf-8')
return html
防止网站认出自己可以随意加UA头
- 此处我要强调一点:不同网站的验证机制不同,上述网站只要有UA即可,所以很轻松就爬到了,但是有的网站它的反爬做得比较好,他会检测referer、ip等等,所以还要做ip代理(池),写request请求,伪造浏览器cookie等等,大家自行查找,等我学会ip代理再第一时间发到博客上。
- (有一个第三方库faker_useragent可以生成header)
- 我先给一部分UA
UA_list = [\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"\
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
from fake_useragent import UserAgent
# 得到ua对象
ua = UserAgent()
#ie浏览器的user agent
print(ua.ie)
#opera浏览器
print(ua.opera)
#chrome浏览器
print(ua.chrome)
#firefox浏览器
print(ua.firefox)
#safri浏览器
print(ua.safari)
#最常用的方式
#写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
print(ua.random)
---------------------
#本段代码参考楼下大佬
作者:haeasringnar
原文:https://blog.csdn.net/haeasringnar/article/details/82490835
3.解析数据格式,并下载在文件夹中,注意文件夹名称要前后加/
写本函数还要结合网站源代码,来确定数据结构,从而解析出来
#解析数据格式,并下载
def get_content(html):
#加载数据
html_py = PyQuery(html)
#此处是获取图片所在分区为class="span3"
item=html_py(".span3").items()
for each in item:
#获取到保存数据的名称
name=each.find('img').attr('title')
#获取路径
url_img=each.find('img').attr('src')
print("名称:{} 路径:{}".format(name,url_img))
#print("名称: %s 路径:%s"%(name,url_img))
#再一次请求网络
download_img_url=requests.get(url=url_img).content
#这样的文件读写更加方便
with open('./20190317_Cris_photo/'+name+'.jpg','wb') as file:
file.write(download_img_url)
4.主函数–程序入口
#入口
if __name__ == '__main__':
#os.getcwd()当前目录绝对路径
file_path=os.path.join(os.getcwd(),'20190317_Cris_photo')
if not os.path.exists(file_path):
os.makedirs(file_path)
for item in range(1,10):
#网址,数值强制字符串转换后,获取十页的内容
url = "https://www.dbmeinv.com/?pager_offset=%s"%str(item)
#请求网络获取服务器数据
html=get_requests(url)
#获取内容并写入文件夹
get_content(html)