久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python爬蟲Scrapy入門篇

 Four兄 2019-09-29

前言

好久沒有更新過了啊…請原諒我……

話不多說,,進(jìn)入正題,!因為Python簡單靈活的特點,,一直是寫爬蟲的熱門語言,,我之前也分享過幾篇簡單的爬蟲例子和教程了,,今天來說一說爬蟲框架Scrapy。
Scrapy是一款簡單高效的Python網(wǎng)絡(luò)爬蟲框架,,使用框架,,我們就可以只關(guān)注數(shù)據(jù)的提取而不用去自己造輪子了。其實,,對于這個框架,,我也是個新手…這里,就用我們學(xué)校的圖書館系統(tǒng)做個簡單的入門項目了,。

安裝

先說一下我的Python是3.6版本的,,電腦是win10。

Scrapy也可以直接用使用pip命令安裝:

pip install scrapy

因為Scrapy依賴了其他一些包,,所以會額外安裝一些庫,,如lxmlTwistedpyOpenSSL等,,這在文檔也有提到,。我在安裝這些庫時有遇到一個問題,報了下面這個錯誤:

Command ''d:\program files\python3.6.1\python.exe' -u -c 'import setuptools, tokenize;__file__='C:\\Users\\ASUS\\AppData\\Local\\Temp\\pip-build-qkm97m8f\\Twisted\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))' install --record C:\Users\ASUS\AppData\Local\Temp\pip-e4cf8gml-record\install-record.txt --single-version-externally-managed --compile' failed with error code 1 in C:\Users\ASUS\AppData\Local\Temp\pip-build-qkm97m8f\Twisted\

可以看到是安裝Twisted出的問題,,解決方法是在 這里 下載對應(yīng)版本的whl包,,我的是Twisted-17.9.0-cp36-cp36m-win32.whlcp后面是Python版本,,win32表示位數(shù),,我的Python是32位的。

然后切換到下載目錄運行以下命令:

pip install Twisted-17.9.0-cp36-cp36m-win32.whl

然后再安裝Scrapy就可以了,。你會看到:

Successfully installed PyDispatcher-2.0.5 asn1crypto-0.24.0 cffi-1.11.4 cryptography-2.1.4 cssselect-1.0.3 parsel-1.4.0 pyOpenSSL-17.5.0 pyasn1-0.4.2 pyasn1-modules-0.2.1 pycparser-2.18 queuelib-1.4.2 scrapy-1.5.0 service-identity-17.0.0

創(chuàng)建項目

切換到你想放這個項目的目錄,,執(zhí)行scrapy startproject projectname創(chuàng)建一個項目,如:

scrapy startproject scrapy_test

生成的項目結(jié)構(gòu)是這樣的:

scrapy_test/
   scrapy.cfg            # deploy configuration file
   scrapy_test/             # project's Python module, you'll import your code from here
       __init__.py
       items.py          # project items definition file
       middlewares.py    # project middlewares file
       pipelines.py      # project pipelines file
       settings.py       # project settings file
       spiders/          # a directory where you'll later put your spiders
           __init__.py

spiders目錄用于放置我們的爬蟲,,items.py用于定義我們要獲取的數(shù)據(jù),,pipelines.py定義存儲,settings.py顧名思義就是配置文件了,。

編寫代碼


第一步我們先定義要存儲什么字段,,這里就定義書名、作者和索引號吧,,編寫items.py

import scrapy
class BooksItem(scrapy.Item):
   '''定義要存儲的字段'''
   # 書名
   name = scrapy.Field()
   # 作者
   author = scrapy.Field()
   # 索引號
   call_number = scrapy.Field()

接下來我們在spiders目錄下編寫爬蟲文件,,我這里新建一個books_spider.py文件,代碼如下:

import scrapy
from scrapy_test.items import BooksItem
class BooksSpider(scrapy.Spider):
   '''圖書爬蟲類'''
   # 這個name不能重復(fù)
   name = 'books'
   # allowed_domains = ['202.116.174.108:8080']
   start_urls = ['http://202.116.174.108:8080/top/top_lend.php?cls_no=ALL']
   def parse(self, response):
       '''處理下載的response的默認(rèn)方法'''
       books = []
       for item in response.xpath('//tr')[1:]:
           book = BooksItem()
           book_name = item.xpath('td[2]/a/text()').extract()
           book_author = item.xpath('td[3]/text()').extract()
           book_call_number = item.xpath('td[5]/text()').extract()
           book['name'] = book_name[0]
           book['author'] = book_author[0]
           book['call_number'] = book_call_number[0]
           books.append(book)
       return books

這個類繼承scrapy.Spider,需要指定name,,它是運行爬蟲用的,,start_urls是要爬取的url列表,parse函數(shù)接收獲取到的response解析用的是scrapy自帶的xpath,這個網(wǎng)頁的結(jié)構(gòu)很簡單,,所以就不多解釋了,。總之,,就是遍歷每一本書的信息,,然后存在books中。這些信息在之前的item中已經(jīng)定義了,。
代碼的編寫到這里就結(jié)束了,,接下來就可以運行了。

運行代碼

要運行代碼,,切換到項目的目錄里,,執(zhí)行下面的命令,其中books就是上面的name,,books.json就是生成的json文件:

scrapy crawl books -o books.json -t json

開始運行時,,出現(xiàn)了一個問題,就是沒報錯,,但沒有結(jié)果,,輸出一片空白,然后發(fā)現(xiàn)下面的提示:

DEBUG: Forbidden by robots.txt

這是因為要獲取的頁面在robots中被禁止了,,所以Scrapy自動忽略了,,只需修改settings.py將:ROBOTSTXT_OBEY改為False就行了。

后來又遇到了亂碼的問題,,輸出全是\uxxx這種字符,,只要在settings.py加上FEED_EXPORT_ENCODING = 'utf-8'就可以。

沒報錯執(zhí)行完上面的命令之后就會在根目錄生成一個books.json文件,,打開,,就會看到保存下來的json格式圖書信息:

[
 {
   'name': '暗戀·橘生淮南',
   'author': '八月長安[著]',
   'call_number': 'I247.57/5494'
 },
 {
   'name': 'Time series and panel data econometrics / First edition.',
   'author': 'M. Hashem Pesaran.',
   'call_number': 'F224.0/EN4'
 },
 {
   'name': '殺死一只知更鳥.第2版',
   'author': '(美國) 哈珀·李著',
   'call_number': 'I712.45/1231=2'
 },
 ...
 ...
 {
   'name': '眾籌:互聯(lián)網(wǎng)金融的下一個風(fēng)口',
   'author': '陳曉暾, 白帆, 陳英編著',
   'call_number': 'F830.45/77'
 }
]


我們的Scrapy入門項目就完成了!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多