簡(jiǎn)單的Scrapy數(shù)據(jù)爬蟲

數(shù)據(jù)爬取展示:

環(huán)境準(zhǔn)備:

  • Python 3+版本
  • Pycharm(可以沒有)
  • Scrapy環(huán)境

Scrapy環(huán)境安裝問題

//cmd中輸入即可(一般在windows系統(tǒng)都會(huì)出問題)
pip install scrapy

Scrapy環(huán)境安裝問題

  • 缺少Scrapy的依賴包問題

    一般缺少parsel, w3lib, pyOpenSSL,cryptography的whl文件,按順序進(jìn)行pip install XXX。如果在線安裝不了,去官網(wǎng)進(jìn)行下載。離線進(jìn)行安裝 pip install XXXX.whl

  • pip提醒沒有此命令

    方法一:進(jìn)入Python安裝目錄中,找到Scripts文件夾中進(jìn)行輸入cmd命令行。(指標(biāo)不治本)

demo.gif

在電腦中環(huán)境變量中path中配置Scripts路徑(治本之策)

3.png
  • pip提醒升級(jí)問題

    解決方法:

    python -m pip install -U --force-reinstall pip
    

    python -m pip install --upgrade pip仍然更新pip版本失敗,用easy_install命令解決問題

Xpath基礎(chǔ)

XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。

花個(gè)五分鐘在W3C上看看就知道了,不是很難。

表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/ 從根節(jié)點(diǎn)選取
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮他們的位置
. 選取當(dāng)前節(jié)點(diǎn)
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@ 選取屬性
方便在網(wǎng)頁上進(jìn)行XPath的編寫,Google瀏覽器有個(gè)很好的插件——XPath Helper

網(wǎng)盤地址:https://pan.baidu.com/s/16ourySoo45BpbfDRjUT32w
提取碼:aps7

直接利用這個(gè)插件在網(wǎng)頁端可以看到XPath獲取的信息

eg:(當(dāng)當(dāng)網(wǎng)——獲取圖書信息XPath)//div[@id="search_nature_rg"]/ul/li/p[@class="detail"]

Scrapy代碼編寫

在新建的文件夾下,cmd命令中輸入

scrapy startproject XXXSpider

一般的命名規(guī)范是XXXSpider,文件名+Spider

創(chuàng)建爬蟲

scrapy genspider 爬蟲名字 網(wǎng)站域名

在cfg文件目錄下執(zhí)行命

<u>爬蟲名字不能和項(xiàng)目名字重名</u>

網(wǎng)站域名:baidu.com google.com

Setting文件的修改部分:

1、ROBOTSTXT_OBEY規(guī)則設(shè)置為False(不用遵守網(wǎng)站的robot文件,如果遵守可能什么都爬不下來)

2、添加User-Agent(Setting文件DEFAULT_REQUEST_HEADERS取消注釋)

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'

依照以上兩步操作,可以得到的文件目錄如下:

在新增的爬蟲文件中編寫代碼:(爬取的是博雅地名網(wǎng))

import scrapy


class GazetterSpider(scrapy.Spider):
    name = 'gazetter'
    allowed_domains = ['tcmap.com.cn']
    start_urls = ['http://www.tcmap.com.cn/jiangsu/']

    //未遍歷
    def parse(self, response):
        # selectors = response.xpath('');
        city_name = response.xpath('//tr[@bgcolor="#f8f8f8"]/td/strong/a/text()').get()
        population = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[2]/text()').get()
        area = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[3]/text()').get()
        code = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[4]/text()').get()
        administrative_division = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[6]/a/text()').get()
        detail = response.xpath('//td[@valign="top"][2]/text()').get()

        items = {
            'cityName': city_name,
            'population': population,
            'area': area,
            'code': code,
            'administrative_division': administrative_division,
            'detail': detail
        }

        yield items

運(yùn)行程序:

scrapy crawl XXXX -o xxx.json

Scrapy輸出文件有四種格式——.json .csv等

編碼問題

在Setting文件中添加

FEED_EXPORT_ENCODING='UTF-8'

否則輸出的文件是Unicode格式,需要轉(zhuǎn)碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容