標(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é)點信息。
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文件
爬蟲代碼編寫完畢后,可以在命令提示符中使用命令運行,也可在PyCharm中運行。
在PyCharm中,右鍵單擊工程名稱,新建一個python文件,名稱為main。這個文件主要功能是執(zhí)行scrapy中的爬蟲程序。
from scrapy import cmdline
cmdline.execute([′scrapy′,′crawl′,′爬蟲文件名′])
最后運行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é)中可以更深地去運用Scrapy框架,多實戰(zhàn)練習(xí),接近工程實際,提升學(xué)生技能水平。
国产一级黄色录像大片|
人妻丰满熟妇AV无码片|
久久精品视频中文字幕无码|
女人的天堂av免费看|
激情在线视频一区二区三区|
青青草在线免费视频播放|
天下第二社区在线视频|
91av手机在线观看|
性感人妻一区二区三区|
99国产精品久久一区二区三区|
国产激情久久久久久熟女老人av
|
激情综合一区二区三区|
免费中文熟妇在线影片|
日本一区二区午夜视频|
久久精品免费一区二区喷潮|
精品国产sm捆绑最大网免费站|
中文字幕一区二区三区四区在线|
最新国产一区二区三区|
国产一区二区三区日韩精品|
国产成人无码一区二区三区在线|
久久久久国产亚洲AV麻豆|
91精品福利一区二区三区|
女人18毛片a级毛片|
国产精品卡一卡二卡三|
亚洲av福利天堂在线观看
|
亚洲av成人无网码天堂|
无码人妻精品中文字幕|
亚洲色无码播放|
午夜国产精品视频免费看电影|
亚洲国产精品悠悠久久琪琪|
成年女人a毛片免费视频|
午夜性刺激免费视频|
超短裙老师在线观看一区二区|
久久日日躁夜夜躁狠狠躁|
亚洲一本到无码av中文字幕|
青草青草伊人精品视频|
免费人妖一区二区三区|
а天堂中文最新一区二区三区
|
无码人妻久久一区二区三区免费
|
中文字幕在线乱码一区|
明星性猛交ⅹxxx乱大交|