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...