標(biāo)簽下“a”標(biāo)簽的“href”屬性值轉(zhuǎn)到下一頁。
圖2 網(wǎng)頁鏈接
2.3 編寫Scrapy框架代碼
在PyCharm里打開Scrapy工程,就能看到Scrapy框架所對應(yīng)的相應(yīng)文件,主要有:items.py、settings.py、pipelines.py和spider路徑下定義的爬蟲python文件。
● items.py文件
首先要在items.py文件中定義圖書的名稱、圖書的作者、圖書的出版社、圖書的評分、圖書的價格信息數(shù)據(jù)結(jié)構(gòu)。
在items.py文件中編寫如下代碼:
import scrapy
class工程名Item(scrapy.Item):
b_name=scrapy.Field()
b_publisher=scrapy.Field()
……
● settings.py文件
在settings.py文件中要設(shè)置以下幾項內(nèi)容,完成爬蟲項目的配置信息:
BOT_NAME=′……′ #爬蟲項目名稱
SPIDER_MODULES=[′……′]#Scrapy要搜索的爬蟲模塊
NEWSPIDER_MODULE=′……′#爬蟲文件的模板,由scrapy genspider命令創(chuàng)建
USER_AGENT=′……′#爬蟲的head頭部信息,不寫頭部信息容易被網(wǎng)站判斷為爬蟲,會被網(wǎng)站禁止爬取信息
DEFAULT_REQUEST_HEADERS={
′Accept′:′……′,
′Accept-Language′:′……′,
} #請求頭信息,避免403問題
ROBOTSTXT_OBEY=False #是否服從機(jī)器人(爬蟲)協(xié)議,默認(rèn)為服從,一般會改為False
ITEM_PIPELINES={
′工程名.pipelines.工程名Pipeline′:300,
} #如果要對爬取到的數(shù)據(jù)永久化保存,需要激活此項。數(shù)字越小,優(yōu)先級越高[5]
● pipelines.py文件
在pipelines.py文件中要處理傳輸過來的數(shù)據(jù),這里我們將爬取到的數(shù)據(jù)以CSV文件永久化保存,以便后期的數(shù)據(jù)分析,主要代碼如下:
from itemadapter import ItemAdapter
import csv
class DoubanbookscrapyPipeline:
def __init__(self):
path=′ F://d_book250.csv′
self.file=open(path,′ab′,encoding=′utf-8′)
self.writer=csv.writer(self.file)
……
將文件以CSV格式保存起來,后期可以繼續(xù)使用Python進(jìn)行分析。也可以寫代碼將其保存到數(shù)據(jù)庫中,以MySQL數(shù)據(jù)庫常見,在pipelines.py中設(shè)置數(shù)據(jù)庫連接、端口等信息,數(shù)據(jù)保存到數(shù)據(jù)庫中可以使用大數(shù)據(jù)的其他組件進(jìn)行分析。
● 爬蟲.py文件
爬蟲文件中實現(xiàn)在網(wǎng)頁中爬取數(shù)據(jù)。代碼思路:首先要給出初始爬取網(wǎng)站的URL,可以使用bs4、正則表達(dá)式、xpath、CSS等方法將要爬取的信息抽取出來,交給items.py中對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。下一頁的URL如何獲取,如何轉(zhuǎn)到等這些操作需要在這個文件中編寫出來。主要代碼如下:
第一部分,爬蟲名稱和首頁的URL要給出來,這些信息在創(chuàng)建工程和文件的時候會自動生成。
name=′doubanbook′
allowed_domains=[′book.douban.com′]
start_urls=[′https://book.douban.com/top250?start=0′]
第二部分,分析response返回的結(jié)果,此處使用xpath的方法獲取要爬取的信息,將這些信息都賦值給items.py中對應(yīng)的數(shù)據(jù)結(jié)構(gòu),這里item列表中的名稱要和數(shù)據(jù)結(jié)構(gòu)中的名稱一致。每一頁有25本圖書信息,所以使用for循環(huán)查找節(jié)點(diǎn)信息。
for content in response.xpath("http://tr[@class=′item′]"):
item=DoubanbookscrapyItem()
item[′b_title′]=content.xpath("td[2]/div[@class=′pl2′]/a/@title").extract_first()
book_info=content.xpath("td[2]/p[1]/text()").extract_first()
book_info_list=book_info.strip().split(" / ")
item[′b_publish′]=……
yield item
第三部分,下一頁繼續(xù)爬取信息,直到最后一個URL網(wǎng)頁爬取完畢。先獲取每個頁面的URL,形成列表信息,然后for循環(huán)遍歷該列表,到每一個網(wǎng)頁中去爬取信息,直至遍歷結(jié)束。
next_pages=response.xpath("http://div[@class=′paginator′]/a/@href").extract()
for next_page in next_pages:
if next_page:
yield scrapy.Request(next_page,callback=self.parse)
● main.py文件
爬蟲代碼編寫完畢后,可以在命令提示符中使用命令運(yùn)行,也可在PyCharm中運(yùn)行。
在PyCharm中,右鍵單擊工程名稱,新建一個python文件,名稱為main。這個文件主要功能是執(zhí)行scrapy中的爬蟲程序。
from scrapy import cmdline
cmdline.execute([′scrapy′,′crawl′,′爬蟲文件名′])
最后運(yùn)行main.py文件,可以在下方的console中看到爬取的結(jié)果。解決CSV文件亂碼問題后,可以看到結(jié)果文件內(nèi)容,如圖3所示。

圖3 CSV文件內(nèi)容
3 總結(jié)
Scrapy框架能夠高效率地實現(xiàn)爬蟲。作為數(shù)據(jù)分析的數(shù)據(jù)來源,用Scrapy框架能夠理順爬蟲思路,簡化代碼。在教學(xué)中要求學(xué)生須合法地利用該框架去爬取學(xué)習(xí)所需要的數(shù)據(jù),涉及到的分布式爬蟲、正則表達(dá)式、CSS等技術(shù)也可以得到訓(xùn)練。以后的教學(xué)中可以更深地去運(yùn)用Scrapy框架,多實戰(zhàn)練習(xí),接近工程實際,提升學(xué)生技能水平。
不卡av一区二区在线|
波多野结衣有码|
亚洲AV乱码毛片在线播放|
国产成人美涵人妖视频在线观看|
麻豆资源在线观看视频|
国产乱国产乱老熟300部视频|
亚洲天堂99|
蜜桃一区二区三区自拍视频|
亚洲av毛片在线网站|
亚洲欧美乱日韩乱国产|
亚洲国产成人久久综合一区77|
国产一区二区丁香婷婷|
亚洲av熟女中文字幕|
夜夜揉揉日日人人青青|
久久AⅤ无码精品为人妻系列|
久久av一区二区三区下|
亚洲国产中文字幕无线乱码|
国内成+人 亚洲+欧美+综合在线|
国产精品白浆视频免费观看|
日本变态网址中国字幕|
午夜福利影院成人影院|
一本一道波多野结衣av中文|
传媒在线无码|
日本不卡一区二区三区在线观看
|
97久久天天综合色天天综合色hd|
久久99精品中文字幕在|
日韩有码在线免费视频|
亚洲av无码乱码国产一区二区|
永久免费不卡在线观看黄网站|
中文字幕人妻系列一区尤物视频|
国产激情综合五月久久|
日本最新免费二区|
999国产精品亚洲77777|
国产在线看不卡一区二区|
高黄暴h日本在线观看|
大香伊蕉国产av|
久久久久久AV无码成人|
中文字幕一区在线直播|
人人爽久久涩噜噜噜av|
中国精品视频一区二区三区|
黑丝美腿国产在线观看|