使用scrapy爬取美食信息
本节将利用scrapy爬取淘宝美食信息,其中涉及的内容有:多级网页的爬取技巧、数据存储以及图片下载。本次的编程环境为:Pycharm+Python3.4(windows)+scrapy1.4.0
1. 创建一个工程:打开cmd,用cd命令进入到指定文件夹,输入:scrapy startproject topgoods 回车,出现以下页面:
2. 用pycharm打开,工程结构如图所示:
3. 在spiders文件夹下新建一个Python文件,命名为taobao.py。具体的创建及实现过程参见博文:http://www.aobosir.com/blog/2016/12/26/python3-large-web-crawler-taobao-com-import-to-MySQL-database/
# -*- coding: utf-8 -*-
class TaobaoSpider(scrapy.Spider):
name='taobao'
allowed_domains=['taobao.com']
start_urls=['http://www.taobao.com']
def parse(self, response):
key='小吃'
for i in range(0,2): #只爬取前两页的信息
url='https://s.taobao.com/search?q='+str(key)+'&s='+str(44*i)
#print("url:",url)
yield Request(url=url,callback=self.get_page)
4.按照上述博文,能实现淘宝信息的爬取,但不能完全下载两页中的48*2=96个商品信息。我将settings中设置了延迟下载,延迟时间为3s,数据库和图片均只获得了80个商品的信息。后续找到完善办法,将会重更此文。数据库中获取的信息如图所示:
- 在完成上述爬虫任务的基础上,还可以爬取相应的图片。首先在Items中新加一个字段, 用于存储图片下载的URL:
- 此外对settings文件稍作修改:
-
- 最最重要的 当然还是在taobao.py中添加如下信息(放到next()方法中):
file_url = response.xpath('//*[@id="J_ImgBooth"]/@src').extract()[0]
file_url = 'http:' + file_url
print(file_url)
item['file_urls'] = [''+file_url] ##特别注意,不这么处理会产生错误。
- 最后,在pycharm的terminal中,运行topgoods:
- 图片下载结果如图所示:
-