scrapy 工程示例
时间: 2023-09-07 07:14:50 浏览: 48
以下是一个简单的 Scrapy 工程示例,用于提取 Stack Overflow 网站上的职位信息:
1. 创建 Scrapy 工程
在命令行中输入以下命令来创建一个新的 Scrapy 工程:
```
scrapy startproject stackoverflow_jobs
```
这将创建一个名为 `stackoverflow_jobs` 的新目录,其中包含 Scrapy 工程的基本结构。
2. 定义数据模型
在 `stackoverflow_jobs` 目录下创建一个名为 `items.py` 的文件,并定义以下数据模型:
```python
import scrapy
class StackOverflowJob(scrapy.Item):
title = scrapy.Field()
company = scrapy.Field()
location = scrapy.Field()
job_type = scrapy.Field()
date_posted = scrapy.Field()
link = scrapy.Field()
```
这个数据模型定义了我们要提取的职位信息的字段,包括标题、公司、地点、职位类型、发布日期和链接。
3. 定义爬虫
在 `stackoverflow_jobs/spiders` 目录下创建一个名为 `jobs.py` 的文件,并定义以下爬虫:
```python
import scrapy
from stackoverflow_jobs.items import StackOverflowJob
class JobsSpider(scrapy.Spider):
name = "jobs"
allowed_domains = ["stackoverflow.com"]
start_urls = [
"https://stackoverflow.com/jobs"
]
def parse(self, response):
for job in response.css('div.-job'):
item = StackOverflowJob()
item['title'] = job.css('a.s-link::text').get()
item['company'] = job.css('div.-company span::text').get()
item['location'] = job.css('div.-company span.fc-black-500::text').get()
item['job_type'] = job.css('div.-job-summary span::text').get()
item['date_posted'] = job.css('div.-posted span::text').get()
item['link'] = job.css('a.s-link::attr(href)').get()
yield item
next_page = response.css('a[data-gps-track="jobs_pagination_next_page"]::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
```
这个爬虫会从 Stack Overflow 的职位列表页面开始,依次提取每个职位的信息,并跟随下一页链接,直到没有更多的页面为止。
4. 运行爬虫
在命令行中进入 `stackoverflow_jobs` 目录,并输入以下命令来启动爬虫:
```
scrapy crawl jobs -o jobs.csv
```
这将运行我们定义的 `jobs` 爬虫,并将提取的数据保存到名为 `jobs.csv` 的 CSV 文件中。
5. 分析数据
打开 `jobs.csv` 文件,你会看到 Scrapy 工程已经成功地提取了 Stack Overflow 网站上的职位信息,并将其保存到了 CSV 文件中。你可以使用 Excel、Python 或其他工具来进一步分析这些数据,例如计算职位数量、比较不同职位类型的薪资水平等等。