scrapy 常用快查

2021-09-12 21:58:36 字數 4680 閱讀 2109

scrapy startproject 

#生成專案檔案

scrapy genspider myspider 163.com #生成基本spider模板

scrapy genspider -l #顯示spider模板列表

scrapy genspider -d template #預覽模板格式

scrapy genspider [

-t template]

#指定name和**生成spider檔案,可選指定模板

# obey robots.txt rules

robotstxt_obey =

false

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

import scrapy

class

myspider

(scrapy.spider)

: name =

'myspider'

allowed_domains =

['163.com'

]# 限制主站網域名稱

start_urls =

['']def

start_requests

(self)

:# 必須返回可迭代型別

for url in self.start_urls:

yield self.make_requests_from_url(url)

defmake_requests_from_url

(self, url)

:return scrapy.request(url, callback=self.parse, method=

'get'

, encoding=

'utf-8'

, dont_filter=

false

,errback)

# return scrapy.formrequest(url, formdata={}, callback=self.parse)

defparse

(self,response)

: response.text

response.body.decode(encoding=

'utf-8'

)

# override the default request headers:

default_request_headers =

class

proxymiddleware

(object):

defprocess_request

(self,request,spider)

: request.meta[

'proxy']=

''

# enable or disable ********** middlewares

# see

**********_middlewares =

from scrapy.exceptions import dropitem

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

class

pipeline_format

(object):

defprocess_item

(self,item,spider)

: item=pd.dataframe(

[dict

(item)])

return item

class

pipeline_mysql

(object):

def__init__

(self,user,password,port,database,charset)

: self.user=user

self.password=password

self.port=port

self.database=database

self.charset=charset

# 用setting變數初始化自身物件

@classmethod

deffrom_crawler

(cls,crawler)

:return cls(

user=crawler.settings.get(

'mysql_user'),

password=crawler.settings.get(

'mysql_password'),

port=crawler.settings.get(

'mysql_port'),

database=crawler.settings.get(

'mysql_database'),

charset=crawler.settings.get(

'mysql_charset'))

# spider開啟時呼叫,構造engine及連線資料庫

defopen_spider

(self,spider)

: cracom=

'mysql+pymysql:'

self.engine=create_engine(cracom.

format

( user=self.user,

passwork=self.passwork,

port=self.port,

database=self.atabase,

charset=self.charset)

) self.session=sessionmaker(bind=self.engine)()

# spider關閉時呼叫,斷開資料庫

defclose_spider

(self,spider)

: self.session.close(

)# 處理item,把item寫入資料庫並返回item

defprocess_item

(self,item,spider)

: item.to_sql(

'tbname'

,con=self.engine,if_exists=

,index=

false

)return item

# 開啟管道,數值越少越優先處理

item_pipelines =

# 定義用於連線資料庫的引數

mysql_database=

'scrapy_test'

mysql_user=

'root'

mysql_password=

'123456'

mysql_port=

3306

mysql_charset=

'utf8mb4'

scrapy crawl myspider

scrapy crawl myspider -o fname.json

-o fname.jl #行格式的json

-o fname.csv

-o fname.htp:

//url/path/file_name.csv]

#上傳到網路

response.body #返回二進位制文字

response.text #返回可讀文字

response.urljoin(href)

#返回絕對位址

# 選擇器

sel.extract(default='')

#返回列表,提取標籤內容,沒有內容返回''

sel.extract_frist(

)#返回首個

sel.re(

'(.*)'

)#返回列表,提取()內匹配的內容

sel.re_first(

'(.*)'

)#返回首個

#(#根據標籤定位

res.xpath(

'//div/a'

)res.css(

'div a'

)#根據屬性值定位

res.xpaht('//div[@id

="images"

]/a)

res.css(

'div[id=images] a'

)#根據屬性值包含內容定位

res.xpath(

'//a[contains(@href,"image")]/img'

)res.css(

'a[href*=image] img'

)#定位標籤內文字內容

res.xpath(

'//title/text()'

) res.css(

'title::text'

)#定位獲取屬性內容

response.xpath(

'//a/@href'

)response.css(

'a::attr(href)'

)

爬蟲 Scrapy(八)Scrapy快讀提取超連結

前面寫過用xpath 方式定位response物件中我們所需要的超連結位址,但如果超連結過多且位置規律性差就不太方便了,現在介紹一種快速提取和過濾超連結位址的方法 1.明確需求 檢視豆瓣圖書中首頁中所有圖書的超連結,先看首頁長這樣的 然後隨便點選一本數,進入圖書的詳情頁,是這樣的 此時我們檢視下瀏覽...

CSS Hack 彙總快查

遮蔽ie瀏覽器 也就是ie下不顯示 lang zh select ff,select empty safari可見 這裡select是選擇符,根據情況更換。第二句是mac上safari瀏覽器獨有的。僅ie7與ie5.0可以識別 html select 當面臨需要只針對ie7與ie5.0做樣式的時候就...

CSS Hack 彙總快查

以前在藍色理想讀過這篇小毅原創文章,今天寫程式時突然需要類似的知識,便留存收藏下來了。原址 http andymao.com andy post 76.html 毅部落格 遮蔽ie瀏覽器 也就是ie下不顯示 lang zh select ff,select empty safari可見 這裡sele...