Python爬虫实践入门篇

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 1、前言学习Python二个多月啦,周末时开始兴趣学习爬虫,虽然有点概念,但是也折腾了大半天,下面就开始简要记录一下吧。2、需要的准备Python:需要基本的python语法基础requests:专业用于请求处理,requests库学习文档中文版lxml:其实可以用pythonth自带的正则表达式库re,但是为了更加简单入门,用 lxml 中的 etree 进行网页数据定位爬取。

1、前言

学习Python二个多月啦,周末时开始兴趣学习爬虫,虽然有点概念,但是也折腾了大半天,下面就开始简要记录一下吧。

2、需要的准备

  • Python:需要基本的python语法基础
  • requests:专业用于请求处理,requests库学习文档中文版
  • lxml:其实可以用pythonth自带的正则表达式库re,但是为了更加简单入门,用 lxml 中的 etree 进行网页数据定位爬取。

通过pip安装 requests 和 lxml 库,在终端输入:

pip install requests
pip install lxml

注:如果是安装到Python3就用pip3 install

下载过程成功的输出:

Collecting lxml
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/00/fd/5e65f293e366a63198dade275b886e5d24752367c2e67e3993023b0d58ef/lxml-4.2.3-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (8.7MB)
    100% |████████████████████████████████| 8.7MB 821kB/s 
Installing collected packages: lxml
Successfully installed lxml-4.2.3
  • 注:
    如果安装过程遇到任何问题,请谷歌吧,如果网上找不到答案,也不要问我!找不到答案我直播吃翔!!!

3、实践过程

为了这过程有点兴趣,我找了一个美图的网站,爬虫了一波图片~

实践爬虫的网站链接:https://www点aitaotu点com(注意,这不是打广告!)

  • 下载页面html内容:
    page = 'https://www点aitaotu点com/guonei/36350.html'
    data = requests.get(page).text
    dom = etree.HTML(data)
  • 解析(定位)元素:
    title_path = '//*[@id="photos"]/h1/text()'
    totalpage_path = '//*[@id="picnum"]/span[2]/text()'
    image_path = '//*[@id="big-pic"]/p/a/img'

这里的xpath怎么获取,就是网页里面,打开开发者检查元素工具,在safari和chrome都有这个功能:

img_0f985ac28c9466c38e77394cf32df3bf.png
20180710-html-show-element.png
img_22c28ee9b42d91c535405acfbfdd74a6.png
20180710-html-copy-xpath.png
  • 获取元素内容:
    title = dom.xpath(title_path)[0]
    total = dom.xpath(totalpage_path)[0]
    image_url = dom.xpath(image_path)[0]

    img_src = image_url.xpath('./@src')[0]
    img_alt = image_url.xpath('./@alt')[0]

这里解析就不解析了,其实通过PyCharm IDE可能实时查看每个对象的属性,可以更清晰的了解解析的元素结构,帮助理解,这里就暂时不说IDE的方法啦,大家有兴趣可以试试,也是很简单的~

最后拿到图片链接,就是下载图片然后保存输出到电脑啊!(文章尾附完整代码!)

总结

爬虫入门就这样结束啦!学习了python后,发现语法很简单,代码很轻松就完成!不到100行!!!

python通过各种库,解决了编程语言自身的庞大,完成了自己是胶水语言的特点!

通过这次实践,其实,有很多细节东西,只有自己做了才知道,比较说保存图片的路径,找到当前目录,怎么分目录保存,目录文件操作,这些都是自己之前实践了一个django工具学习过来的。所以,现在经历多了,才知道,什么时候学习都不晚,有些东西,真的是不知道什么时候你会用上,真的,自己早知道这个道理几年,就不像年轻时那么想,这东西怎么可能会用上,不学!!!果然是年轻坑爹!!!学会老,学到老吧!

代码

#!/usr/local/bin/python3
#coding=utf-8

import os
import requests
from lxml import etree


def downloadImages(url):
    data = requests.get(page).text
    dom = etree.HTML(data)

    title_path = '//*[@id="photos"]/h1/text()'
    totalpage_path = '//*[@id="picnum"]/span[2]/text()'
    image_path = '//*[@id="big-pic"]/p/a/img'

    title = dom.xpath(title_path)[0]
    total = dom.xpath(totalpage_path)[0]
    image_url = dom.xpath(image_path)[0]

    img_src = image_url.xpath('./@src')[0]
    img_alt = image_url.xpath('./@alt')[0]

    print(title, total, img_src, img_alt)

    cwd = os.getcwd()
    save_path = os.path.join(cwd, 'images/' + title)
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    
    print(u'保存图片的路径:', save_path)

    img_path = os.path.dirname(img_src)
    img_name = os.path.basename(img_src)
    img_format = img_name.split('.')[1]
    print(img_path, img_name)

    for i in range(1, int(total) + 1):
        new_img_url = '%s/%02d.%s' % (img_path, i, img_format)
        save_img_path = '%s/%02d.%s' % (save_path, i, img_format)
        # 下载图片
        image = requests.get(new_img_url)
        # 命名并保存图片
        with open(save_img_path, 'wb') as f:
            f.write(image.content)




if __name__ == '__main__':

    url = 'https://www.aitaotu.com/'

    # download list
    list = ['guonei/36350.html', 'guonei/36352.html', 'guonei/36351.html', 'guonei/36357.html', 'guonei/36250.html',
            'guonei/36341.html', 'guonei/36334.html', 'guonei/36306.html', 'guonei/35969.html', 'guonei/35219.html',
            'guonei/36290.html', 'guonei/36277.html', 'guonei/36263.html', 'gangtai/36303.html', 'gangtai/36226.html',
            'guonei/35260.html', 'guonei/35247.html', 'guonei/36257.html', 'guonei/36221.html', 'guonei/21647.html',
            'guonei/21499.html', 'guonei/36319.html', 'guonei/34903.html', 'guonei/14148.html', 'guonei/33780.html',
            'guonei/14338.html', 'guonei/14550.html', 'guonei/14818.html', 'guonei/16820.html', 'guonei/18388.html',
            'guonei/13447.html', 'guonei/25912.html', 'guonei/13991.html', 'guonei/8246.html', 'guonei/36171.html'
            ]

    print(u'准备下载:%d套图', len(list))

    for type in list:
        page = url + type
        downloadImages(page)


    print(u'下载完成啦!')

代码就没有太多注释,因为很简单,就说一下运行方式吧,在终端:

python2:

python YellowImage.py

python3:

python3 YellowImage.py

最后的成果:


img_6ef6463008745277b16a53fa68e71cb6.png
20180712-results.png

参考


  • 如有疑问,欢迎在评论区一起讨论!
  • 如有不正确的地方,欢迎指导!


注:本文首发于 iHTCboy's blog,如若转载,请注来源

目录
相关文章
|
2天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
15 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
2天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
8 2
|
1天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
6 1
|
3天前
|
Python
探索Python装饰器:从入门到实践
【10月更文挑战第32天】在编程世界中,装饰器是一种特殊的函数,它允许我们在不改变原有函数代码的情况下,增加额外的功能。本文将通过简单易懂的语言和实际案例,带你了解Python中装饰器的基础知识、应用以及如何自定义装饰器,让你的代码更加灵活和强大。
11 2
|
3天前
|
监控 Python
探索Python中的装饰器:从入门到实践
【10月更文挑战第31天】在Python的世界里,装饰器是那些隐藏在幕后的魔法师,它们拥有着改变函数行为的能力。本文将带你走进装饰器的世界,从基础概念到实际应用,一步步揭开它的神秘面纱。你将学会如何用几行代码增强你的函数功能,以及如何避免常见的陷阱。让我们一起来发现装饰器的魔力吧!
|
3天前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
16 2
|
6天前
|
数据管理 程序员 数据处理
利用Python自动化办公:从基础到实践####
本文深入探讨了如何运用Python脚本实现办公自动化,通过具体案例展示了从数据处理、文件管理到邮件发送等常见办公任务的自动化流程。旨在为非程序员提供一份简明扼要的实践指南,帮助他们理解并应用Python在提高工作效率方面的潜力。 ####
|
5天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
6天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。

热门文章

最新文章