數(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)不治本)

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

-
pip提醒升級(jí)問題
解決方法:
python -m pip install -U --force-reinstall pippython -m pip install --upgrade pip仍然更新pip版本失敗,用easy_install命令解決問題
-
安裝Scrapy安裝提醒Time out
解決辦法離線安裝Scrapy的whl文件。
https://pan.baidu.com/s/1cMlFdSqprMUrxx81xu1NzQ
提取碼:h7rw
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.jsonScrapy輸出文件有四種格式——.json .csv等
編碼問題
在Setting文件中添加
FEED_EXPORT_ENCODING='UTF-8'否則輸出的文件是Unicode格式,需要轉(zhuǎn)碼。
