Python爬虫学习之爬取淘宝搜索图片
准备工作
因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息。
selenium、lxml安装和版本适配
selenium需要与当前的chrome版本相匹配,否则会报错。如下图:
适配的方法可以参考:https://blog.csdn.net/qq_26200629/article/details/86141131,这里介绍的很详细了,我就不多说了。我使用的是PyCharm开发的,在插件管理中直接添加selenium和lxml就行
初始化构造函数
site_url是当前访问页。
base_site_url用来拼接跳转页。
chrome_driver是你下载的chromedriver所在路径。
sleep_time为休息时长。
save_img_path 图片保存路径。
def __init__(self):
"""
初始化构造函数
"""
self.base_site_url = 'https://s.taobao.com/search?q=男士衬衫'
self.site_url = 'https://s.taobao.com/search?q=男士衬衫'
chrome_driver = 'C:/Users/CSSRC/AppData/Local/Temp/7zOC8AB4263/chromedriver.exe'
self.driver = webdriver.Chrome(executable_path=chrome_driver)
self.sleep_time = 5
self.save_img_path = 'D:/git-proj/CrawlerFromTaoBao/image'
获取淘宝页面代码
def get_page(self):
"""
获取淘宝页面代码
"""
self.driver.get(self.site_url)
time.sleep(self.sleep_time)
print(self.driver.title)
self.get_item()
爬取当前页面的每个商品,提取商品的图片
def get_item(self):
"""
爬取当前页面的每个商品,
提取商品的图片
"""
html = self.driver.page_source.encode('utf-8')
selector = etree.HTML(html)
itemList = selector.xpath("//*[@class='J_ItemPic img']")
# 循环遍历该页所有商品
for divPic in itemList:
image_id = divPic.xpath("./@id")[0]
image_url = divPic.xpath("./@data-src")[0]
self.save_img(self.save_img_path, image_url, image_id)
# 获取分页信息
pagination = selector.xpath(
"//*[@class='item next']/a/@data-value")
print(pagination)
print('正在准备切换分页')
if len(pagination) == 0:
print('没有下一页了')
else:
print('加载下一页内容')
self.site_url = self.base_site_url + "&s=" + pagination[0]
print(self.site_url)
self.get_page()
存储图片方法
def save_img(savePath, imageURL, fileName):
"""
存储图片方法
Arguments:
imageURL <string> -- 图片的url
fileName <string> -- 用于存储的文件名/图片的ID
"""
print('开始保存图片' + fileName)
with open(savePath + '/' + fileName + '.png', 'wb') as f:
f.write(requests.get("http:" + imageURL).content)