scrapy实战一:爬取boss直聘信息,存入mysql数据库
程序员文章站
2022-04-26 10:00:24
...
scrapy版本:1.5
python版本:3.6
系统:windows
网站链接: www.zhipin.com
1 创建项目
CTRL+R 输入cmd打开DOS窗口,输入如下命令创建项目(可自定义项目位置)
scrapy startproject job_demo
从图片中可以看到,你可以进入你的项目然后创建你的spider
cd Job_demo
新建spider蜘蛛
scrapy genspider job www.zhipin.com
2 编写项目
整个项目的结构如下
在爬去之前,我们先要明确好,需要爬取得东西,以python爬虫工程师为例
1 职位名称
2 工资
3 公司名称
4 公司地点
items代码
import scrapy
class JobDemoItem(scrapy.Item):
name = scrapy.Field() #公司名
title = scrapy.Field() #岗位名
wage = scrapy.Field() #工资
site = scrapy.Field() #地点
审查元素示例
spider代码
import scrapy
from Job_demo.items import JobDemoItem
class JobSpider(scrapy.Spider):
name = 'job'
allowed_domains = ['www.zhipin.com']
start_urls = ['https://www.zhipin.com/c101010100/h_101010100/?query=python爬虫&page=1']
def parse(self, response):
body = response.css(".job-primary")
for head in body:
item = JobDemoItem()
item["title"] = head.css(".job-title::text").extract()[0]
item["wage"] = head.css(".red::text").extract()[0]
item['site'] = head.css(".info-primary p::text").extract_first().strip()
item['name'] = head.css(".company-text .name a::text" ).extract_first()
yield item
# 翻页
next_page = response.css(".page .next::attr(href)").extract()[0]
if next_page is not None:
yield response.follow('https://www.zhipin.com'+next_page,callback=self.parse) #从上图中可以看的出链接并不完全,需要我们补充。
pipeline.py代码
import pymysql.cursors
class JobDemoPipeline(object):
def process_item(self, item, spider):
self.cursor.execute(
'''insert into 51job(`name`,title,site,wage)
value (%s,%s,%s,%s)''',
#将item['name'],item['title'],item['site'],item['wage']数据插入表51job中,注意,必须相对应
(item['name'],item['title'],item['site'],item['wage']))
#提交sql语句
self.connect.commit()
return item
def __init__(self):
#链接数据库
self.connect = pymysql.connect(
host= 'localhost', #数据库地址
port= 3306, #数据库端口
db= 'scrapydb', #数据库名
user = 'root', #用户名
passwd='root', #密码
charset='utf8', #编码方式,如果不注意可能会乱码
use_unicode=True,
)
#通过cursor执行增删改查
self.cursor = self.connect.cursor()
setting.py代码需要修改如下
#开启item管道
ITEM_PIPELINES = {
'Job_demo.pipelines.JobDemoPipeline': 300,
}
ROBOTSTXT_OBEY = False #不遵从机器人协议
在数据库中新建表51job 并创建 相应的name title wage site字段。我给51job表创建了id字段并设置为唯一且自增。
最后启动爬虫
scrapy crawl job
爬取完毕后刷新51job表就能看到如下变化啦
上一篇: Linux基础之用户和用户组管理
下一篇: Boss直聘招聘信息爬取