使用scrapy进行爬虫操作(python)

1.创建一个Scrapy项目
先找到安装scrapy的目录:打开cmd命令行,先用cd命令转到该目录下的venv\scripts\,再键入命令:scrapy startproject test1,即可创建一个新的项目。

2.在test1工程之下,新建一个begin.py文件,和scrapy.cfg在同一级目录下,内容如下:

from scrapy import cmdline
	cmdline.execute("scrapy crawl bupt".split())#bupt为爬虫的名字,在spider.py中定义

3.使用pycharm打开工程test1
需要修改的文件:items.py(items数据文件), pipelines.py(管道文件), setting.py(设置文件)
int.py(初始化文件), middlewares.py(中间件文件), scrapy.cfg(项目的配置文件)不需要修改

4.修改items.py文件

import scrapy
	class MyItem(scrapy.Item):
	# define the fields for your item here like:
		school = scrapy.Field()
		link = scrapy.Field()

5.在spiders文件夹下新建一个spider.py文件

import scrapy
	from test1.items import MyItem #从items.py中引入MyItem对象
	class mySpider(scrapy.spiders.Spider):
		name = "bupt" #爬虫的名字是bupt
		allowed_domains = ["bupt.edu.cn/"] #允许爬取的网站域名
		start_urls = ["https://www.bupt.edu.cn/yxjg1.htm"] #初始URL,即爬虫爬取的第一个URL
	
		def parse(self, response): #解析爬取的内容
			item = MyItem() #生成一个在items.py中定义好的Myitem对象,用于接收爬取的
			数据
			for each in response.xpath('/html/body/div/div[2]/div[2]/div/ul/li[4]/div/ul/*'): #用xpath来解析html,div标签中的数据就是我们需要的数据
				item['school'] = each.xpath("a/text()").extract() #学院名称在text中
				item['link'] = each.xpath("a/@href").extract() #学院链接在href中
				if(item['school'] and item['link'] ): #去掉值为空的数据
					yield(item) #返回item数据给到pipelines模块

6.修改pipelines.py

import json

class MyPipeline(object):
	def open_spider(self, spider):
		try: #打开json文件
			self.file = open('MyData.json', "w", encoding="utf-8")
		except Exception as err:
			print(err)

	def process_item(self, item, spider):
		dict_item = dict(item) #生成字典对象
		json_str = json.dumps(dict_item, ensure_ascii=False) + "\n" #生成json串
		self.file.write(json_str) #将json串写入到文件中
		return item
	
	def close_spider(self, spider):
		self.file.close() #关闭文件

7.修改setting.py

ITEM_PIPELINES = {'test1.pipelines.MyPipeline': 300,}

参数是分配给每个类的整型值,确定了它们运行的顺序,item按数字从低到高的顺序,通过pipeline。
通常将这些数字定义在0-1000范围内。

8.运行spider.py,并将其运行时的 Script path 配置项修改为begin.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值