用python从豆瓣上爬取王祖贤的照片

用python实现从豆瓣网上爬取王祖贤的照片

准备工作

安装好python、chromedriver、浏览器的XPath Helper插件 python学习:http://www.runoob.com/python3/python3-tutorial.htmlXPath语法学习:http://www.w3school.com.cn/xpath/xpath_syntax.asp

实战

这次爬取的数据分别为json格式和HTML格式

json格式

json格式在www.douban.com网站中,搜索王祖贤,通过开发者模式可以找到请求的地址 https://www.douban.com/j/search_photo?q=%E7%8E%8B%E7%A5%96%E8%B4%A4&limit=20&start=0,如下图所示:

640?wx_fmt=png

然后我们访问这个url,可以看到返回了json的数据:

640?wx_fmt=png

解析代码示例
# 数据是json格式	
def getPhotos():	
    ''' for 循环 请求全部的 url '''	
    for i in range(0, 200, 20):	
        url = 'https://www.douban.com/j/search_photo?q=' + query + '&limit=20&start=' + str(i)	
        html = requests.get(url).text  # 得到返回结果	
        response = json.loads(html, encoding='utf-8')  # 将 JSON 格式转换成 Python 对象	
        for image in response['images']:	
            print(image['src'])  # 查看当前下载的图片网址	
            download(image['src'], image['id'])  # 下载一张图片

HTML格式

HTML格式的访问https://movie.douban.com,搜索 王祖贤,通过查看源码,了解结构,然后用XPath Helper插件做试验,按住ctrl+shift+x 同时鼠标点击王祖贤图片,根据XPath的语法同时根据HTML的结构写解析表达式: //div[@class='item-root']/div[@class='detail']/div[@class='title']/a[@class='title-text']

XPath语法学习:http://www.w3school.com.cn/xpath/xpath_syntax.asp

640?wx_fmt=png

解析代码示例
# 数据是 html格式,有时候网页会用 JS请求数据,只有等JS都加载结束后,才能获取完成的html,但xpath不受限制	
def getMoviePhotos():	
    url = 'https://movie.douban.com/subject_search?search_text=' + query + '&cat=1002'	
    driver = webdriver.Chrome(chromedriverPath)	
    driver.get(url)	
    # 初始化	
    html = etree.HTML(driver.page_source)	
    # 使用xpath helper, ctrl+shit+x 选中元素	
    # xpath 语法 http://www.w3school.com.cn/xpath/xpath_syntax.asp	
    src_xpath = "//div[@class='item-root']/a[@class='cover-link']/img[@class='cover']/@src"	
    title_xpath = "//div[@class='item-root']/div[@class='detail']/div[@class='title']/a[@class='title-text']"	
    srcs = html.xpath(src_xpath)	
    titles = html.xpath(title_xpath)	
    # zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,返回由元组组成的对象。优点是节约内存	
    # 参考 http://www.runoob.com/python3/python3-func-zip.html	
    for src, title in zip(srcs, titles):	
        # join 字符串拼接	
        print('\t'.join([str(src), str(title.text)]))	
        download(src, title.text)	
    driver.close()

完整代码

import requests	
import json	
# lxml是一个流行的解析库,使用的是Xpath语法,可以解析HTML	
from lxml import etree	
from selenium import webdriver	
query = '王祖贤'	
downloadPath = 'D:/workspace/study/python/text_classification/testdata/photos/'	
# chromedriver需要配置环境变量,查看网上资料说建议放到python的Scripts目录下	
chromedriverPath = 'D:/devsoft/python/Scripts/chromedriver'	
''' 下载图片 '''	
def download(src, id):	
    dir = downloadPath + str(id) + '.jpg'	
    try:	
        pic = requests.get(src, timeout=10)	
        fp = open(dir, 'wb')	
        fp.write(pic.content)	
        fp.close()	
    except requests.exceptions.ConnectionError:	
        print('图片无法下载')	
# 数据是json格式	
def getPhotos():	
    ''' for 循环 请求全部的 url '''	
    for i in range(0, 200, 20):	
        url = 'https://www.douban.com/j/search_photo?q=' + query + '&limit=20&start=' + str(i)	
        html = requests.get(url).text  # 得到返回结果	
        response = json.loads(html, encoding='utf-8')  # 将 JSON 格式转换成 Python 对象	
        for image in response['images']:	
            print(image['src'])  # 查看当前下载的图片网址	
            download(image['src'], image['id'])  # 下载一张图片	
# 数据是 html格式,有时候网页会用 JS请求数据,只有等JS都加载结束后,才能获取完成的html,但xpath不受限制	
def getMoviePhotos():	
    url = 'https://movie.douban.com/subject_search?search_text=' + query + '&cat=1002'	
    driver = webdriver.Chrome(chromedriverPath)	
    driver.get(url)	
    # 初始化	
    html = etree.HTML(driver.page_source)	
    # 使用xpath helper, ctrl+shit+x 选中元素	
    # xpath 语法 http://www.w3school.com.cn/xpath/xpath_syntax.asp	
    src_xpath = "//div[@class='item-root']/a[@class='cover-link']/img[@class='cover']/@src"	
    title_xpath = "//div[@class='item-root']/div[@class='detail']/div[@class='title']/a[@class='title-text']"	
    srcs = html.xpath(src_xpath)	
    titles = html.xpath(title_xpath)	
    # zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,返回由元组组成的对象。优点是节约内存	
    # 参考 http://www.runoob.com/python3/python3-func-zip.html	
    for src, title in zip(srcs, titles):	
        # join 字符串拼接	
        print('\t'.join([str(src), str(title.text)]))	
        download(src, title.text)	
    driver.close()	
getPhotos()	
getMoviePhotos()

成果

640?wx_fmt=png

总结

用python实现爬虫一直是我想学习的,但却迟迟没有行动,趁着放假,跟着数据分析的专栏做了几个实战的练习,很高兴最后成功了,思路和代码参考了老师的例子和大家的评论,因为我是python零基础,所以通过实战也顺便学了python。整个过程下来的感悟是,还是实战学东西快,以后更要多多实操,而不仅仅看理论。小小的实战成功能激发自己学习的动力,希望大家也能亲自尝试下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值