树莓派 之 爬虫(Scrapy)

简介: 跑爬虫比较接近电影里对Hacker印象,输入几行代码,程序就可以运行很久刚好树莓派已经预装了Python2,可以在树莓派上体验一下,另外爬虫确实很实用,可以高效搜集很多信息,比复制粘贴强了很多而且Scrapy门槛很低,几个小时就能上手,得到你想要的...

跑爬虫比较接近电影里对Hacker印象,输入几行代码,程序就可以运行很久
刚好树莓派已经预装了Python2,可以在树莓派上体验一下,另外爬虫确实很实用,可以高效搜集很多信息,比复制粘贴强了很多
而且Scrapy门槛很低,几个小时就能上手,得到你想要的数据
安装:

  • sudo apt-get install libffi-dev
  • sudo apt-get install libxml2-dev
  • sudo apt-get install libxslt1-dev
  • sudo apt-get install python-dev
  • sudo apt-get install libssl-dev

安装配置virtualenv:

  • sudo pip install virtualenv

安装virtualenvwrapper:

  • sudo mkdir ~/scrapy_spider
  • sudo pip install --user virtualenvwrapper
  • export WORKON_HOME=~/Envs
  • mkdir -p $WORKON_HOME
  • source /usr/local/bin/virtualenvwrapper.sh

创建名为scrapy的virtualenv

  • mkvirtualenv scrapy

配置完之后会终端行首会显示(scrapy)$,说明处于名为scrapy的virtualenv

  • ls $WORKON_HOME

使workon在重启后依然有效:

  • sudo nano ~/.bashrc

添加以下内容至末尾:

  • export WORKON_HOME=$HOME/Envssource /usr/local/bin/virtualenvwrapper.sh
  • source ~/.bashrc

virtualenv内安装scrapy:

  • (scrapy)$ sudo pip install scrapy

进入名为scrapy的virtualenv:

  • workon scrapy

退出virtualenv:

  • deactivate

简单爬虫示例:
单个的爬虫文件最关键是start_urls,以及返回的内容
比如你想抓取北京所有的7-11门店名称及位置
先登录官网店铺信息页面,一共在8个区有店,鼠标悬停观察每个区的url,这样start_urls就确定了
需要先获取每个门店的url,用Chrome浏览器右键审查门店链接,弹出窗口内右击相应代码位置 Copy > Copy XPath
得到: ...tr[1]/th/a
所以url表达式为:

  • response.xpath('.//tr/th/a/@href')

补全即可得到完整url:

  • response.urljoin(href.extract())

然后进入单个门店url查看想获取信息的XPath
门店名称为:

  • //*[@id="mainContentsBox"]/h4

门店位置(百度地图坐标)在js代码内:

  • //*[@id="mainContentsBox"]/script

用Shell测试是否能抓取店名及位置(百度地图坐标):

输入:

  • response.xpath('//div[@id="mainContentsBox"]/h4/text()').extract()[0]

能够返回店名
百度地图坐标藏在js代码内,需用正则表达提取

  • response.xpath('//*[@id="mainContentsBox"]/script').re(r'BMap.Point(([0-9.]+),([0-9.]+))')

能够返回位置(百度地图坐标),7-11北京官网的一部分坐标似乎本身有问题,并不是爬虫的关系,直接去url内查看源码也是一样的结果
创建单个爬虫:

  • cd ~/scrapy_spider
  • workon scrapy
  • sudo nano ~/scrpay_spider/711bj.py

711bj.py

# -*- coding: utf-8 -*-
import scrapy


class StackOverflowSpider(scrapy.Spider):
    name = '711bj'
    start_urls = ['http://www.7-11bj.com.cn/?chengqu/cq/223.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/224.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/225.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/226.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/227.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/228.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/242.html'] + \
                ['http://www.7-11bj.com.cn/?chengqu/cq/243.html']

    def parse(self, response):
        for href in response.xpath('.//tr/th/a/@href'):
            full_url = response.urljoin(href.extract())
            yield scrapy.Request(full_url, callback=self.parse_store)

    def parse_store(self, response):
        yield {
            'title': response.xpath('//div[@id="mainContentsBox"]/h4/text()').extract()[0],
            'BMap.Point': response.xpath('//*[@id="mainContentsBox"]/script').re(r'BMap.Point\(([0-9.]+),([0-9.]+)\)'),
            'link': response.url,
        }

保存退出 CTRL + X ,提示是否保存按 y
运行爬虫:

  • scrapy runspider 711bj.py -o test711bj.csv

查看结果:

  • cat ~/scrapy_spider/test711bj.csv

这当然是非常简单的一个爬虫,推荐去看官方文档,比如这个例子,你看懂这个例子后几分钟就能写出自己的爬虫,适用于大部分网站。官方文档写的非常完善,很多时候你搜索Scrapy的问题都会被链接到这里
另外推荐一个视频,这是Eloy Zuniga Jr.一次讲座的音频修复版,时长约一个多小时,完全看懂的话,写爬虫基本就没什么问题了
爬虫可配合crontab定时爬取,比如每月爬一次7-11在北京的店铺信息:

  • crontab -e

首次编辑crontab,会被要求选择编辑器,一般默认(Nano)即可,在文件末加入:

  • 0 0 1 * * env -i bash -c 'export WORKON_HOME=~/Envs && source /usr/local/bin/virtualenvwrapper.sh && source ~/Envs/scrapy/bin/activate && cd ~/scrapy_spider && scrapy runspider 711bj.py -o 711bj_$(date +%Y%m%d).csv && deactivate'

如果爬虫被封,需要用IP代理或者加入Header

相关文章
|
4月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
24 1
|
5月前
|
数据采集 调度 Python
Scrapy爬虫中合理使用time.sleep和Request
Scrapy爬虫中合理使用time.sleep和Request
|
13天前
|
数据采集 存储 中间件
【专栏】随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用
【4月更文挑战第27天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程和中间件机制提升爬取效率。它的灵活性体现在可定制化组件、支持多种数据库存储及与Selenium、BeautifulSoup等工具集成。Scrapy易于扩展,允许自定义下载器和解析器。在实践中,涉及项目配置、Spider类编写、数据抓取、存储与分析。面对动态网页和反爬机制,Scrapy可通过Selenium等工具应对,但需注意法规与道德规范。随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用。
|
18天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
22 0
|
2月前
|
数据采集 Web App开发 搜索推荐
项目配置之道:优化Scrapy参数提升爬虫效率
项目配置之道:优化Scrapy参数提升爬虫效率
|
2月前
|
数据采集 存储 数据可视化
介绍一下常见的爬虫框架或库,如`Scrapy`。
【2月更文挑战第22天】【2月更文挑战第70篇】介绍一下常见的爬虫框架或库,如`Scrapy`。
|
3月前
|
数据采集 JavaScript 前端开发
深度剖析Selenium与Scrapy的黄金组合:实现动态网页爬虫
深度剖析Selenium与Scrapy的黄金组合:实现动态网页爬虫
|
4月前
|
数据采集 存储 调度
Scrapy:解锁网络爬虫新境界
在当今信息爆炸的时代,获取并处理大量网络数据是互联网行业中至关重要的一环。Python网络爬虫框架Scrapy作为一款高效、灵活的工具,为开发者提供了强大的能力来抓取、解析和存储各类网页信息。本文将介绍Scrapy的概念、主要特点以及实践经验,帮助读者掌握这一工具,并在实际项目中应用。
|
4月前
|
数据采集 存储 机器人
Scrapy网络爬虫框架——从入门到实践
网络爬虫已经成为了信息获取的必备工具之一,而Scrapy作为Python中最流行的网络爬虫框架之一,具有高效、可扩展、易用等特点。本文将深入介绍Scrapy框架的概念和实践,帮助读者快速掌握构建高质量网络爬虫的方法。
80 0
|
4月前
|
数据采集 存储 调度
Scrapy:从入门到实践的网络爬虫框架
Scrapy是一款强大的Python网络爬虫框架,可以帮助开发者更高效地抓取互联网上的数据。本文将介绍Scrapy的概念和基本原理,详细讲解如何使用Scrapy框架实现一个简单的网络爬虫,并分享一些实战经验和技巧。