- 创建scrapy项目,在cmd中找到需要创建项目的目录,运行
scrapy startproject spidername
即会自动创建好项目的目录结构,然后再在pycharm中打开即可。
这里我们需要尝试爬取腾讯招聘网站上的信息: - 先依据以上创建爬虫:
scrapy genspider tencent_hr tencent.com
创建完成后的目录结构如图所示 - 由于需要用到mongo存储爬取到的数据,需要提前安装mongo,并安装pymongo:
pip install pymongo
,本人这里是在windows下测试,所以需要把mongodb配置为系统服务,开机自启,具体配置可以参考:https://blog.youkuaiyun.com/heshushun/article/details/77776706 - 现编写具体爬取数据的爬虫,代码如下:
class TencentHrSpider(scrapy.Spider):
name = 'tencent_hr'
allowed_domains = ['tencent.com']
start_urls = ['https://hr.tencent.com/position.php?keywords=&lid=0&tid=87']
def parse(self, response):
tr_list = response.xpath('//table[@class="tablelist"]//tr')[1:-1]
for tr in tr_list:
item = {}
item["title"] = tr.xpath('./td[1]/a/text()').extract_first()
item["position_type"] = tr.xpath('./td[2]/text()').extract_first()
item["number"] = tr.xpath('./td[3]//text()').extract_first()
item["city"] = tr.xpath('./td[4]/text()').extract_first()
item["publist_date"] = tr.xpath('./td[5]/text()').extract_first()
yield item
通过步骤3可以将爬取到的数据解析封装为一个个的item,然后传递到后面,由pipeline进行处理,这里我们声明一个pipeline对item进行处理直接存储到mongo中,代码如下:
from pymongo import MongoClient
import logging
client = MongoClient()
collection = client["spider"]["test"]
class TencentPipeline(object):
def process_item(self,item,spider):
if(spider.name=="tencent_hr"):
collection.insert(item)
return item
完成以上代码后,直接在cmd中运行:scrapy crawl tencent_hr
,结束后通过命令行进入mongo shell,查看对应数据即可。
这个小项目相对简单,因为爬取过程中发现腾讯招聘官网这里貌似反爬虫机制没咋做,估计一般也很少有人会去爬取他们的数据,最多是像这种学习测试用的例子,接下来我们要进阶做的就是爬取拉勾上的数据,相比较而言,估计是被爬的多了,拉勾上的反爬虫限制就好一些,所以需要做的调整和应对会更多。