python丨Spider類爬取糗事百科

2021-09-17 18:20:23 字數 3644 閱讀 7432

安裝

pip install pypiwin32

pip install twisted-18.7.0-cp36-cp36m-win_amd64.whl

pip install scrapy

建立和執行專案

scrapy startproject qsbk   #建立專案

scrapy genspider qsbk_spider "qiushibaike.com" #建立爬蟲

scrapy crawl qsbk_spider #執行爬蟲

**

qsbk_spider.py

# -*- coding: utf-8 -*-

''''''

import scrapy

from qsbk.items import qsbkitem

class qsbkspiderspider(scrapy.spider):

name = 'qsbk_spider'

allowed_domains = ['qiushibaike.com']

start_urls = ['']

base_domain = ""

def parse(self, response):

duanzidivs = response.xpath("//div[@id='content-left']/div")

for duanzidiv in duanzidivs:

author = duanzidiv.xpath(".//h2/text()").get().strip()

content = duanzidiv.xpath(".//div[@class='content']//text()").getall()

content = "".join(content).strip()

item = qsbkitem(author=author,content=content)

yield item

#爬後面頁的資料

next_url = response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()

if not next_url:

return

else:

yield scrapy.request(self.base_domain+next_url,callback=self.parse)

item.py

import scrapy

class qsbkitem(scrapy.item):

author = scrapy.field()

content = scrapy.field()

pipelines.py

# -*- coding: utf-8 -*-

import json

''''''

#1.手動把dick轉換成json格式

# class qsbkpipeline(object):

# def __init__(self):

# self.fp = open('duanzi.json','w',encoding='utf-8')

## def open_spider(self,spider):

# print('開始爬蟲')

## def process_item(self, item, spider):

# item_json = json.dumps(dict(item),ensure_ascii=false)

# self.fp.write(item_json+'\n')

# return item

## def close_spider(self,spider):

# self.fp.close()

# print('爬蟲結束了')

#2.適用jsonitemexporter,使用與資料量小的情況下

# from scrapy.exporters import jsonitemexporter

# class qsbkpipeline(object):

# def __init__(self):

# self.fp = open('duanzi.json','wb')

# self.exporter = jsonitemexporter(self.fp,ensure_ascii=false,encoding='utf-8')

# self.exporter.start_exporting()

## def open_spider(self,spider):

# print('開始爬蟲')

## def process_item(self, item, spider):

# self.exporter.export_item(item)

# return item

## def close_spider(self,spider):

# self.exporter.finish_exporting()

# self.fp.close()

# print('爬蟲結束了')

#3.jsonlinesitemexporter,適用與資料量大的情況下

from scrapy.exporters import jsonlinesitemexporter

class qsbkpipeline(object):

def __init__(self):

self.fp = open('duanzi.json','wb')

self.exporter = jsonlinesitemexporter(self.fp,ensure_ascii=false,encoding='utf-8')

def open_spider(self,spider):

print('開始爬蟲')

def process_item(self, item, spider):

self.exporter.export_item(item)

return item

def close_spider(self,spider):

self.fp.close()

print('爬蟲結束了')

settings.py

robotstxt_obey = false

download_delay = 1

default_request_headers =

item_pipelines =

start.py

from scrapy import cmdline

cmdline.execute("scrapy crawl qsbk_spider".split())

python丨Selenium爬取拉鉤職位資訊

第一頁職位資訊 from selenium import webdriver from lxml import etree import re import time class lagouspider object def init self self.driver webdriver.chrom...

爬取糗事百科的spider

個人一直對網路爬蟲感興趣,最近使用python的flask框架開發了乙個小型 有待改進 以及最近在學習深度學習的開源框架caffe,caffe提供了python介面。藉此機會學習了一下python以及利用python開發爬蟲。希望後面能夠利用自己寫的爬蟲,爬取一些資料集用於caffe訓練。如下 au...

函式週期表丨資訊丨值丨資訊類函式

資訊類函式 這一部分函式,屬於用法比較簡單的資訊類函式,沒有什麼太大的說道,通常可以用在任意一種邏輯表示式。結果返回都是true或者false。用途 用來判定各種資料型別。isblank dax isblank 值 作用 判定值是否為空白。iserror dax iserror 值 作用 判定值是否...