HTML渲染分为两类。动态加载和静态加载。静态加载就是整个HTML文档都是有服务器渲染之后,发送给客户端进行展示。但是随着技术拓展,越来越多的网页上的有效数据是通过js动态加载出来的,如果我们还是用传统的方式爬取,那么结果可想而知。今天介绍Scrapy+Splash模拟浏览器行为,动态加载js之后,获取有效数据。
1、安装Scrapy
C:\Users\Administrator>pip install scrapy
#成功标志
Successfully installed Scrapy-1.5.1
2、创建Scrapy项目
C:\Users\Administrator>scrapy startproject ZhipinSpider
#成功标志,在Administrator文件夹下生成一个ZhipinSpider文件夹,结构如下:
ZhipinSpider
scrapy.cfg
ZhipinSpider
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders
__init__.py
job_position.py
3、编写类
3.1、job_position.py
# 导入访问MySQL的模块
import mysql.connector
class ZhipinspiderPipeline(object):
# 定义构造器,初始化要写入的文件
def __init__(self):
self.conn = mysql.connector.connect(user='root',
password='root',
host='192.168.36.58', port='3306',
database='directrecruit',
use_unicode=True)
self.cur = self.conn.cursor()
# 重写close_spider回调方法,用于关闭数据库资源
def close_spider(self, spider):
print('----------关闭数据库资源-----------')
# 关闭游标
self.cur.close()
# 关闭连接
self.conn.close()
def process_item(self, item, spider):
self.cur.execute("INSERT INTO job_inf VALUES(null, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
(item['title'], item['salary'], item['company'], item['url'], item['work_addr'], item['industry'], item.get('company_size'), item['recruiter'], item['publish_date']))
self.conn.commit()
3.2、items.py
import scrapy
class ZhipinspiderItem(scrapy.Item):
# 工作名称
title = scrapy.Field()
# 工资
salary =