python工具箱查询手册书籍京东_十二. 项目实战:爬取京东商城中的书籍信息
爬取網(wǎng)址:https://search.jd.com/Search?keyword=python
爬取信息:書名,價格,出版社,日期
爬取方式:scrapy框架 + splash
存儲方式:csv
頁面如下,可以看到python相關(guān)的圖書超過6000本。
不過最終只能看到100頁,也就是6000本的信息。
京東圖書每個頁面有60本圖書,頁面打開時首先只加載30本書,通過滾動條的下拉,動態(tài)加載后面的30本書。所以我們要執(zhí)行一下JavaScript代碼使頁面滾動到頁面底部把剩余的30本書加載出來。
翻頁位于頁面的底部,可以定位翻頁部分然后用scrollIntoView(true)實現(xiàn)拖拽顯示翻頁部分,或使用window.scroll("起始點“,“結(jié)束點”)來實現(xiàn)頁面的滾動加載。
翻頁規(guī)律:第一頁是page=1,動態(tài)加載部分是page2,第二頁是page3,動態(tài)加載部分是page4。由于動態(tài)加載部分由splash完成,對于翻頁來說就是1,3,5向上疊加即可。
spider的代碼為:
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
lua_script = '''
function main(splash)
splash:go(splash.args.url) --打開頁面
splash:wait(2) --等待加載
splash:runjs("document.getElementsByClassName('page')[0].scrollIntoView(true)") --運行js代碼
splash:wait(2) --等待加載
return splash:html() --返回頁面數(shù)據(jù)
end
'''
class JdPythonSpider(scrapy.Spider):
name = 'jd_python'
allowed_domains = ['jd.com']
keyword = "python" #填關(guān)鍵字
base_urls = 'https://search.jd.com/Search?keyword={}&enc=utf-8'.format(keyword)
##重寫start request方法,指向parse_urls
def start_requests(self):
yield scrapy.Request(self.base_urls,callback=self.parse_urls)
def parse_urls(self,response):
pageNum = response.xpath('//span[@class="fp-text"]/i/text()').extract_first()
# 構(gòu)造每頁的url,向Splash的execute端點發(fā)送請求
for i in range(pageNum):
url = "{}page={}".format(self.base_urls,i*2+1)
yield SplashRequest(url,endpoint="execute",args={"lua_source",lua_script},cache_args=['lua_source'],callback=self.parse)
def parse(self, response):
# 獲取一個頁面中每本書的名字和價格等
for sel in response.css('ul.gl-warp.clearfix > li.gl-item'):
yield {
'name': sel.css('div.p-name').xpath('string(.//em)').extract_first(),
'price': sel.css('div.p-price i::text').extract_first(),
'press': sel.css('span.p-bi-store a::text').extract_first(),
'date': sel.css('span.p-bi-date::text').extract_first(),
}
settings.py中添加以下信息:
SPLASH_URL = 'http://192.168.99.100:8050' #splash服務(wù)地址
#開啟scrapy_splash的兩個下載中間件,并調(diào)整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware':725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware':810,
}
#設(shè)置去重過濾器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
#支持cache_args(可選)
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
USER_AGENT ='Mozilla/5.0 (Windows NT 10.0; WOW64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3
在cmd運行:scrapy crawl jd_python -o books.csv
結(jié)果為:
注:結(jié)果對data進行了降序排序。
總結(jié)
以上是生活随笔為你收集整理的python工具箱查询手册书籍京东_十二. 项目实战:爬取京东商城中的书籍信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动化测试开发_基于pyth
- 下一篇: go结构体初始化_golang中结构体的