用 scrapy 写第一个爬虫
注:安装步骤跳过,仅供安装好软件参考使用
使用 scrapy 来创建第一个 HelloScrapy 项目
- 在 workSpace 中打开 cmd 输入 scrapy startproject HelloScrapy 得到如下图所示文件
- 用 idea 等工具打开 HelloScrapy 文件,得到如下所示目录结构
注:进入项目时候需要先设置 SDK 不然出现如下情况
解决方法如下
3.开始写爬虫文件,在 spiders 目录下新建 hello_spider.py 文件,具体代码看如下代码片段所示,这里我选用的是 css 选择器,对于我一个 java 后台人员来说, css 选择器更加容易理解和更好上手,至于 xpath ,哦 xpath.
# -*- coding: utf-8-*-
import scrapy
from HelloScrapy.items import HelloscrapyItem
class HelloSpider(scrapy.Spider):
# spider的名字定义了Scrapy如何定位(并初始化)spider,必须是唯一的。 不过可以生成多个相同的spider实例(在 spiders 目录下写多个爬取文件)
name = "helloScrapy"
#我这里使用的启动命令,将爬取的数据写成一个 json 文件,scrapy crawl helloScrapy -o item.json
# 这个属性是可选的.主要用于筛选符合的 url 这里就不使用
# allowed_domains = ['http://www.iqianyue.com/']
# URL列表。当没有制定特定的URL时,spider将从该列表中开始进行爬取。
start_urls = [
'http://www.iqianyue.com/'
]
def parse(self, response):
print("response -> ", response.text)
read_list = response.css('div.pet_content_main > div > div > ul > li')
for read in read_list:
item = HelloscrapyItem()
item["author"] = read.css(
'div.pet_list_one_info > div.pet_list_one_info_l > div::text').extract_first().strip()
item["type"] = read.css(
'div.pet_list_one_info > div.pet_list_one_info_r > div::text').extract_first().strip()
item["title"] = read.css(
' div.am-u-sm-8.am-list-main.pet_list_one_nr > h3 > a::text').extract_first().strip()
#这里的 yield 我理解相当于 java 中的 return,如果这里不将 item 在下文我们启动项目时候是没有将数据写出的
yield item
4.运行命令 scrapy crawl helloScrapy -o item.json 将数据写在根目录下一个 item.json 文件中,如下:
- 这里数据已经爬取下来了,但是我们看到这些数据很显然是 unicode ,我们需要把它转换成中文
5.设置全局编码
- 打开 settings.py 文件,添加 FEED_EXPORT_ENCODING = ‘utf-8’ 将编码设置成 UTF-8 这时候解析的数据就变成中文了.
- 此时再看运行结果
此时一个简单的爬虫就写完成了,是不是迫不及待想上手试试呢?在本示列网站中,每次发送请求时候,返回内容不太一样,会造成自己爬在item.json 文件中的数据和直接浏览器访问不一致,每次浏览器请求的返回内容就不一致的,这个是网站的设定,当然这里没写翻页继续请求的,翻页请求的不过是将请求 url 拼接一下 currentPage 通过 for 循环继续请求,这里就不做任何演示