スクレイピープロジェクトxxxxスクレイピーゲンスパイダーxxxxx "http://www.xx.com"
items.pyを書き込んで、抽出するデータを指定します。spiders
/ xxx.pyを書き込んで、クローラーファイルを書き込んで、要求と応答を処理します。pipelines.py
を書き込んで、パイプラインファイルを書き込み、スパイダーを処理して、アイテムデータを返します。settings.pyを書き込んで
、有効にします。パイプラインの形成およびその他の関連設定
クローラーを実行する
hr.tencent.com
スパイダーテンプレート
scrapygenspider tencent "tencent.com"を作成する
クローラーコマンド
scrapycrawltencentを実行します
++++++++++++++++++++++++++++++++++++
scrapy startprojectのDouyu
scrapy genspider douyu "douyucdn.cn"
item.py
nickname = scrapy.Field()
imagelink = scrapy.Field()
douyucdn.cn
baseUrl = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
offset = 0
start_urls = [baseUrl + str(offset)]
spider.py
def parse(self、response):
data = json.loads(response.body)
#print(data)
if len(data)== 0:
return
for dat in data:
print(dat ["nickname"])
print(dat ["avatar_mid"])
item = DouyuItem()
item ['nickname'] = dat ['nickname']
item ['avatar_mid'] = dat ['avatar_mid']
yield item
self.offset + = 20
yield scarp.Request(self .baseUrl + str(self.offset)、callback = self.parse)
ピップライン
ImagesPipeline
def get_media_requests(self、item、info):
image_link = item ['imagelink']
収量scrapy.Request(image_link)
def process_item(self、item、spider):
アイテムを返す
def item_complete(self、results、item、info):
#print(relust)
#print(***)
image_path = [x ["path"] for ok、x in
resluts if ok] os.rename(images_store + image_path [ 0]、images_store + item ["nickname"] + "。jpg")
return item
settings.py
IMAGES_STORE = ""
Mozilla / 5.0(Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build / HUAWEIBLA-AL00)AppleWebKit / 537.36(KHTML、Geckoなど)バージョン/4.0Chrome/57.0.2987.132 MQQBrowser /8.9モバイルSafari / 537.36
Mozilla / 5.0(iPhone; U; MacOSXのようなCPUiPhone OS 2_0; en-us)AppleWebKit / 525.18.1(GeckoのようなKHTML)バージョン/3.1.1Mobile/5A347Safari/525.200
TOBOTSTXT_OBEY = False
path = [x ["path"] for ok、x in resluts if ok]
cddouyueスクレイプ
クロールDouyu
スクレイプノート
Scrapyをインストールする
scrapyピップインストール
ピップはpypiwin32をインストール
1.テキスト検索用のTF-IDFアルゴリズム
2.リンク配信ウェイト用のリンクアルゴリズム:ページランク
3.リンク再計算用:HITSアルゴリズム
4.リンク関連性用:ヒルトップアルゴリズム
5.リンク計算をより柔軟にする:SALSAアルゴリズム
6、より完全なページランクアルゴリズム
7、ユーザーのクリック動作に基づく結果の並べ替え
インポートscrapy
qsbk.itemsからはQsbkItemインポート
:クラスQsbkSpiderSpider(scrapy.Spider)
NAME = 'qsbk_spider'
allowed_domains = [ 'qiushibaike.com']
start_urls = [ 'https://www.qiushibaike.com/text/page/1'を]
def parse(self、response):
duanzidivs = response.xpth( "// div [@ id = 'content-left'] / div")
for duanzidivs 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)
#duanzi = {"著者 ":author、" content ":content}
アイテム#duanziを生成します
pipes.py
import json
class QsbkPipeline(object):
def __init __(self):
self.fp = open( "duanzi.join"、 "w"、encoding = "utf-8")
def open_spider(self、spider):
print( "乾燥虫開始 ")
pass
def process_item(self、item、spider):
item_json = json.dumps(item)
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( "ぶ虫する束")
settings.py
コメントを開きます
ITEM_PIPELINES = { 'qsbk.pipelines.QsbkPipeline':300 }
items.py
スクレイピーをインポートする
クラスQsbkItem(scrapy.Item):
author = scrapy.Field()
content = scrapy.Field()
恥ずかしさ百科事典爬虫類ノート
1.responseはscrapy.http.response.html.HtmlResponseオブジェクトであり、xpathとcssを使用してデータを抽出できます
。2。抽出されたデータはSelectorまたはSelectListオブジェクトであり、文字列を取得する場合は、getallまたはgetメソッドを実行する必要があります。
3.getallメソッド:セレクター内のすべてのテキストを取得し、リストを返します
4.getメソッド:セレクター内の最初のテキストを取得し、strタイプを返します
5.データを解析する場合は、パイプライン処理に渡す必要があります、次に、yieldを使用して返品するか、すべてのアイテムを収集して、最後にreturnを使用して返品できます
。6.item:「item.py」でモデルを定義することをお勧めします。今後、辞書は使用されません
。7 .pipline:これはデータの保存専用です。次の3つのメソッドが頻繁に使用されます
。open_spider(self、spider)
process_item(self、item、spider)
close_spider(slef、spider)
パイプラインをアクティブにするには、「settings.py」で「ITEM_PIPELINES」を設定する必要があります。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・··························
ITEM_PIPELINES = { 「qsbk.pipelines.QsbkPipeline」:300 }
··············································· ············
パイプラインをjson行の形式で書き直します
scarp.exportersからインポートJsonLinesItemExporter
クラス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( '輸出虫結束了。。。')
パイプラインをjsonファイルの形式で書き直します
からscrapy.exportersインポートJonsItemExporter
クラス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.exporters.export_item(item)
return item
def close_spider(self、spider) :
self.exporter.finish_exporting()
self.fp.close()
print( 'クローラーが終了しました...')
スパイダーがデータの次のページを継続的にクロールできるようにスパイダーを書き直します
····································
クラスqsbk_spider
名前
start_urls
ドメイン
def parse(self、response):
//リストセットを 抽出し
ます
//各アイテムをトラバースします//必要なデータを抽出します
//歩留まりを返し
ます
//次のページへのリンクを抽出します //ある場合はリクエストを開始します
// ifエンドスパイダー
········································· ····
クラスQsbkSpiderSpider(scrapy.Spider):
name = 'qsbk_spider'
allowed_domains = ['qiushibaike.com']
start_urls = ['https://www.qiushibaike.com/text/page/1/']
base_domain = "https://www.qiushibaike.com"
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利回りscrapy.Request(self.base_domain + next_url、callback = slef.parse)
スクレイピーgenspider-cクロール[クローラー名] [ドメイン名]
##### CrawlSpider:
LinkExtractorとRuleを使用する必要があります。これら2つのことにより、クローラーの特定の方向が決まります。
1.ルールを設定する方法を許可します:必要なURLに制限できるようにします。他のur1と同じ
正規表現を生成しないでください。
2.どのような状況でフォローするか:ページをクロールするときに現在の条件を満たすURLをフォローアップする必要がある
場合は、Trueに設定します。それ以外の場合は、Fasleに設定します。3。
どのような状況でコールバックを指定する必要がありますか。この場合、URLに対応するページは、より多くのURLを取得するためのもので
あり、内部のデータを必要としないため、コールバックを指定する必要はありません。URLに対応するページのデータを取得する場合は、
コールバックを指定する必要があります。
非身体アドレスScrapyシェル:
I
1.私たちは、いくつかのデータ抽出テストコードを実行することが便利です。
2. scarpコマンドを実行する場合は、最初にscrapyが配置されている環境に入る必要があることは間違いありません。
3.プロジェクトの構成情報を読みたい場合は、最初にプロジェクトを入力する必要があります。次に、scrapyshell
"コマンドを実行します。
データはmysqlに保存されます
class JianshuSpiderPipeline(object):
def
__init __ :dbparam = { 'host': '127.0.0.1'、 'port': '3306'、 'user': 'root'、 'password': 'root'、 'database': 'jianshu2''charset' : 'utf-8' } self.conn = pymysql.connect(** dbparams) self.cursor = self.conn.cursor() self._sql = None def process_item(self、item、spider) : self.cursor.execute(self.sql、(item ['title']、item ['content']、item ['author'])) self.conn。commit() return item @property def sql(self):
self._sqlでない場合:
self.sql:= "" "
article(id、title、content)に挿入values(null、%s、%s、$ s、$ s)
" ""
return self._sql returnself
。 _sql
非同期エントリ
クラスJianshuTwistedPipeline(object):
def __init __(self):
dbparam = { 'host': ''、 'port': ''、 'user': ''、 'password': ''、 'database': ''、 'charset': 'utf8'、 'cursorclass':cursors.DictCursor } self.dbpool = adapi.ConnectionPool( 'pymysql'、** dbparams) self._sql = None @property def sql(self): if not self._sql : self._sql = "" " insert into()values(null、%s、%s、%s、%s、%s) "" " return self._sql
return self._sql
def process_item(self、item、spider):
defer = self.dbpool.runInteraction(self.insert_item、item)
defer.addErrback(self.handle_error、item、spider)
def insert_item(self、cursor、item):
cursor.execute(self.sql、(item ['title']、item ['content']、item ['author']、item ['avatar']))
def handle_error(self、error、item、spider):
print( '=' * 10 + "error"、item、spider):
print(error)
start.py
スクレイピーインポートコマンドラインからcmdline.execute( "scrapy craw swf" .split())
どこでもPython仮想環境の依存性
pipフリーズ> requirements.txt
rzコマンドは、ローカルファイルのアップロードダイアログを開くことができます
pip install -r required.txt
仮想環境のインストール
pip install virtualenvwrapper
どのpython3
mkvirtualenv -p / usr / bin / python3クローラー-envhttp
://capi.douyucdn.cn/api/v1/getVerticalRoom?limit = 20&offset = 100
https://www.bilibili.com/video/av57909837/?p= 2