爬虫python树莓派编程_树莓派 之 爬虫(Scrapy)

本文介绍了如何在树莓派上安装和配置虚拟环境,以及使用Scrapy框架创建简单的爬虫。通过实例展示了如何抓取北京7-11门店的名称和位置信息,并利用crontab定时爬取数据。
摘要由CSDN通过智能技术生成

跑爬虫比较接近电影里对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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值