scrapy爬取前程无忧51job网职位信息并存储到数据库

  1. spiders中代码如下
import scrapy
from scrapy import Request
from QianCheng.items import QianchengItem
import re

class ExampleSpider(scrapy.Spider):
    name = '51job'

    def start_requests(self):
        url_str = 'https://www.51job.com/zhengzhou/'
        yield Request(url=url_str,callback=self.parse,dont_filter=True,meta={'page':'0'})
        
    def parse(self, response):
        contents = response.xpath('//div[@class = "el"]')
        for i in contents:
            urls = i.xpath('p/span[1]/a[@href]/@href').extract()
            for urll in urls:
                yield Request(url=urll,callback=self.parse_dail,meta={'page':'1'})
        if re.search(r'search',response.url):
            yield Request(url = response.url,callback=self.parse,meta={'page':'2'})    #标记page,再中间件中识别并进行翻页操作

    def parse_dail(self,response):
        job_name = response.xpath('//h1[@title]/@title').extract()
        company =response.xpath('//p[@class="cname"]/a[@title]/@title').extract()
        saray = response.xpath('//div[@class="cn"]/strong/text()').extract()
        company_desc = response.xpath('//div[@class="tmsg inbox"]/text()').extract()
        qianchengs = QianchengItem()
        qianchengs['job_name'] = ''.join(job_name)
        qianchengs['company'] = ''.join(company)
        qianchengs['saray'] = ''.join(saray)
        qianchengs['company_desc'] = ''.join(company_desc).strip()
        yield qianchengs
  1. scrapy.items
import scrapy

class QianchengItem(scrapy.Item):

    job_name = scrapy.Field()
    company= scrapy.Field()
    saray= scrapy.Field()
    company_desc= scrapy.Field()
  1. scrapy.piplines获取数据并进行存储操作
import sqlite3
  
class QianchengPipeline(object):

    def __init__(self):
        self.conn = sqlite3.connect("qiancheng.db")
        self.cursor = self.conn.cursor()
        self.cursor.execute("create table IF NOT EXISTS zhaopin(job_name varchar(200),company varchar(500),saray varchar(100),company_desc varchar(100))")

    def process_item(self, item, spider):
        self.cursor.execute("insert into zhaopin values('%s','%s','%s','%s')"%(item["job_name"],item["company"],item["saray"],item["company_desc"]))
        self.conn.commit()
        return item

  1. 中间件中
    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options as FOptions
    import time
    from scrapy.http import HtmlResponse

class SeleniumMiddlewares(object):

def __init__(self):
    self.options = FOptions()
    #self.options.add_argument("-headless")
    self.browser = webdriver.Firefox(executable_path="/home/hello/Downloads/geckodriver",firefox_options=self.options)
def process_request(self,request,spider):
    if int(request.meta['page']) == 0:
        self.browser.get(request.url)
        input_name =self.browser.find_element_by_xpath('//*[@id="kwdselectid"]')
        input_name.click()
        input_name.send_keys('python')
        btn_seacher = self.browser.find_element_by_xpath('//*[@id="supp"]/div[1]/div/div[1]/button')
        btn_seacher.click()
        time.sleep(3)

    if int(request.meta['page']) == 1:
        self.browser.get(request.url)
        time.sleep(3)
    if int(request.meta['page']) == 2:
        self.browser.get(request.url)
        next_page = self.browser.find_element_by_xpath('//a[contains(text(),"下一页")]')
        next_page.click()

    return HtmlResponse(url=self.browser.current_url, body=self.browser.page_source, encoding="utf-8",
                        request=request)
  1. scrapy.setting中:
BOT_NAME = 'QianCheng'
SPIDER_MODULES = ['QianCheng.spiders']
NEWSPIDER_MODULE = 'QianCheng.spiders'
ROBOTSTXT_OBEY = False
DOWNLOADER_MIDDLEWARES = {
   'QianCheng.middlewares.SeleniumMiddlewares': 543,
}
ITEM_PIPELINES = {
   'QianCheng.pipelines.QianchengPipeline': 300,
}
  1. 存储结果如下:
    数据库存储内容
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,scrapy是一个强大的Python爬虫框架,可以用来爬取各种站数据。以下是爬取前程无忧岗位的基本步骤: 1. 创建一个Scrapy项目 在终端中使用以下命令创建一个Scrapy项目: ``` scrapy startproject jobspider ``` 这将创建一个名为`jobspider`的Scrapy项目。 2. 创建一个Spider 使用以下命令在项目中创建一个Spider: ``` scrapy genspider jobspider spidername ``` 其中,`jobspider`是Spider所属的项目名称,`spidername`是Spider的名称。 3. 定义Spider 在Spider的Python文件中,定义`start_urls`属性和`parse`方法。`start_urls`属性是一个列表,包含要爬取的页面URL。`parse`方法是一个回调函数,用于处理爬取到的响应数据。 以下是一个简单的Spider定义: ``` import scrapy class JobSpider(scrapy.Spider): name = "jobspider" start_urls = [ 'https://search.51job.com/list/000000,000000,0000,00,9,99,Python,2,1.html', ] def parse(self, response): for job in response.css('div.el'): yield { 'title': job.css('p.t1 span a::text').get(), 'company': job.css('span.t2 a::text').get(), 'location': job.css('span.t3::text').get(), 'salary': job.css('span.t4::text').get(), } next_page = response.css('div.p_in ul li.bk a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 这个Spider将爬取前程无忧上Python相关的岗位信息,并提取岗位标题、公司名称、工作地点和薪资信息。 4. 运行Spider 在终端中使用以下命令运行Spider: ``` scrapy crawl spidername -o output.json ``` 其中,`spidername`是Spider的名称,`output.json`是将结果保存到的文件名。爬虫运行完成后,结果将保存到指定的JSON文件中。 以上就是使用Scrapy爬取前程无忧岗位的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值