f.write(img_content)
复制代码
Xpath定位提取图片数据
代码实现:
import requests
from lxml import etree
设置保存路径
path = r’D:\test\picture_1\ ’
目标url
url = “http://pic.netbian.com/4kmeinv/index.html”
伪装请求头 防止被反爬
headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1”,
“Referer”: “http://pic.netbian.com/4kmeinv/index.html”
}
发送请求 获取响应
response = requests.get(url, headers=headers)
打印网页源代码来看 乱码 重新设置编码解决编码问题
内容正常显示 便于之后提取数据
response.encoding = ‘GBK’
html = etree.HTML(response.text)
xpath定位提取想要的数据 得到图片链接和名称
img_src = html.xpath(‘//ul[@class=“clearfix”]/li/a/img/@src’)
列表推导式 得到真正的图片url
img_src = [‘http://pic.netbian.com’ + x for x in img_src]
img_alt = html.xpath(‘//ul[@class=“clearfix”]/li/a/img/@alt’)
for src, name in zip(img_src, img_alt):
img_content = requests.get(src, headers=headers).content
img_name = name + ‘.jpg’
with open(path + img_name, ‘wb’) as f: # 图片保存到本地
print(f"正在为您下载图片:{img_name}")
f.write(img_content)
复制代码
2.翻页爬取,实现批量下载
单线程版
import requests
from lxml import etree
import datetime
import time
设置保存路径
path = r’D:\test\picture_1\ ’
headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1”,
“Referer”: “http://pic.netbian.com/4kmeinv/index.html”
}
start = datetime.datetime.now()
def get_img(urls):
for url in urls:
发送请求 获取响应
response = requests.get(url, headers=headers)
打印网页源代码来看 乱码 重新设置编码解决编码问题
内容正常显示 便于之后提取数据
response.encoding = ‘GBK’
html = etree.HTML(response.text)
xpath定位提取想要的数据 得到图片链接和名称
img_src = html.xpath(‘//ul[@class=“clearfix”]/li/a/img/@src’)
列表推导式 得到真正的图片url
img_src = [‘http://pic.netbian.com’ + x for x in img_src]
img_alt = html.xpath(‘//ul[@class=“clearfix”]/li/a/img/@alt’)
for src, name in zip(img_src, img_alt):
img_content = requests.get(src, headers=headers).content
img_name = name + ‘.jpg’
with open(path + img_name, ‘wb’) as f: # 图片保存到本地
print(f"正在为您下载图片:{img_name}")
f.write(img_content)
time.sleep(1)
def main():
要请求的url列表
url_list = [‘http://pic.netbian.com/4kmeinv/index.html’] + [f’http://pic.netbian.com/4kmeinv/index_{i}.html’ for i in range(2, 11)]
get_img(url_list)
delta = (datetime.datetime.now() - start).total_seconds()
print(f"抓取10页图片用时:{delta}s")
if name == ‘main’:
main()
复制代码
程序运行成功,抓取了10页的图片,共210张,用时63.682837s。
多线程版
import requests
from lxml import etree
import datetime
import time
import random
from concurrent.futures import ThreadPoolExecutor
设置保存路径
path = r’D:\test\picture_1\ ’
user_agent = [
“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 (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 (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 (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 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24”
]
start = datetime.datetime.now()
def get_img(url):
headers = {
“User-Agent”: random.choice(user_agent),
“Referer”: “http://pic.netbian.com/4kmeinv/index.html”
}
发送请求 获取响应
response = requests.get(url, headers=headers)
打印网页源代码来看 乱码 重新设置编码解决编码问题
内容正常显示 便于之后提取数据
response.encoding = ‘GBK’
html = etree.HTML(response.text)
xpath定位提取想要的数据 得到图片链接和名称
img_src = html.xpath(‘//ul[@class=“clearfix”]/li/a/img/@src’)
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!