用scrapy框架翻页爬取考研信息并存储到csv中
时间: 2024-03-28 07:38:19 浏览: 71
使用Scrapy爬取动态数据
好的,使用 Scrapy 框架可以更加方便地进行翻页和数据抓取。下面是一个示例代码,可以爬取研招网的考研信息并存储到 csv 文件中。
首先,需要在终端中使用以下命令创建一个 Scrapy 项目:
```
scrapy startproject kaoyan_info
```
然后,在项目的 kaoyan_info/spiders 目录下创建一个名为 kaoyan_spider.py 的文件,并将以下代码复制进去:
```
import scrapy
from scrapy.selector import Selector
from scrapy.http import FormRequest
import csv
class KaoyanSpider(scrapy.Spider):
name = 'kaoyan'
allowed_domains = ['yz.chsi.com.cn']
start_urls = ['https://yz.chsi.com.cn/zsml/queryAction.do']
def parse(self, response):
# 设置查询条件
formdata = {
'ssdm': '',
'yjxkdm': '',
'yjxkdmValue': '',
'zymc': '',
'xxfs': '',
'pageno': '1'
}
yield FormRequest.from_response(response, formdata=formdata, callback=self.parse_result)
def parse_result(self, response):
# 解析查询结果
sel = Selector(response)
rows = sel.xpath('//table[@class="zsml-table"]/tr')
for row in rows[1:]:
cols = row.xpath('.//td/text()').extract()
yield {
'学校': cols[0].strip(),
'专业': cols[1].strip(),
'科类': cols[2].strip(),
'计划数': cols[3].strip(),
'招生人数': cols[4].strip()
}
# 翻页
params = {
'ssdm': '',
'yjxkdm': '',
'yjxkdmValue': '',
'zymc': '',
'xxfs': '',
'pageno': str(int(response.request.meta['page']) + 1)
}
yield FormRequest.from_response(response, formdata=params, callback=self.parse_result, meta={'page': params['pageno']})
def closed(self, reason):
# 保存数据到 csv 文件
with open('kaoyan.csv', 'w', newline='') as csvfile:
fieldnames = ['学校', '专业', '科类', '计划数', '招生人数']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for item in self.items:
writer.writerow(item)
```
这个爬虫会自动翻页,将每一页的查询结果解析出来,并保存到一个 csv 文件中。你可以在项目的根目录下运行以下命令来运行爬虫:
```
scrapy crawl kaoyan
```
最后,当爬虫运行结束时,会自动将抓取到的数据保存到 kaoyan.csv 文件中。
阅读全文