摘要:例如這個(gè)界面,我要獲取全中國(guó)各大城市的物流園區(qū)分布信息,并且要獲取詳情信息,這個(gè)頁(yè)面里面是有個(gè)地圖鑲嵌,每個(gè)城市物流信息你要多帶帶點(diǎn)擊地圖上的信息才能顯示。
最近有個(gè)需求,是要爬取某個(gè)物流公司的官網(wǎng)信息,我看了下官網(wǎng),基本上都是靜態(tài)頁(yè)面比較好抓取,不像那種資訊類,電子商務(wù)類型的網(wǎng)站結(jié)果復(fù)雜,反爬嚴(yán)格,AJAX眾多,還內(nèi)心暗自慶幸,當(dāng)我進(jìn)一步分析時(shí)候發(fā)現(xiàn)并非普通的靜態(tài)頁(yè)面。
例如這個(gè)URL界面,我要獲取全中國(guó)各大城市的物流園區(qū)分布信息,并且要獲取詳情信息,
這個(gè)頁(yè)面里面是有個(gè)地圖鑲嵌,每個(gè)城市物流信息你要多帶帶點(diǎn)擊地圖上的信息才能顯示。
https://www.glprop.com.cn/our...
我剛開(kāi)始想,這種會(huì)不會(huì)是ajax請(qǐng)求呢,通過(guò)chrmoe抓包并沒(méi)有發(fā)現(xiàn),然后我查看網(wǎng)頁(yè)源代碼
發(fā)現(xiàn)所有城市信息在一個(gè)scripts里面
如圖:
然后各個(gè)園區(qū)的信息在一個(gè)叫park={xx}里面存著
原來(lái)都在這里面,直接獲取源代碼,正則匹配,開(kāi)干。
item:
#普洛斯 class PuluosiNewsItem(scrapy.Item): newstitle=scrapy.Field() newtiems=scrapy.Field() newslink=scrapy.Field() class PuluosiItem(scrapy.Item): assetstitle = scrapy.Field() assetaddress=scrapy.Field() assetgaikuang=scrapy.Field() assetpeople=scrapy.Field() asseturl = scrapy.Field()
pipelines:
class PuluosiNewsPipeline(object): def __init__(self): self.wb=Workbook() self.ws=self.wb.active #設(shè)置表頭 self.ws.append(["普洛斯新聞標(biāo)題","新聞發(fā)布時(shí)間","新聞URL"]) self.wb2 = Workbook() self.ws2 = self.wb2.active self.ws2.append(["資產(chǎn)標(biāo)題", "資產(chǎn)地址", "資產(chǎn)概況","其他信息","URL"]) def process_item(self,item,spider): if isinstance(item, PuluosiNewsItem): line = [item["newstitle"], item["newtiems"], item["newslink"]] # 把數(shù)據(jù)中每一項(xiàng)整理出來(lái) self.ws.append(line) self.wb.save("PuluosiNews.xlsx") # 保存xlsx文件 elif isinstance(item,PuluosiItem): line = [item["assetstitle"], item["assetaddress"], item["assetgaikuang"],item["assetpeople"],item["asseturl"]] self.ws2.append(line) self.wb2.save("PuluosiAsset.xlsx") # 保存xlsx文件 return item
spider:
# -*- coding: utf-8 -*- import scrapy,re,json from news.items import PuluosiNewsItem,PuluosiItem from scrapy.linkextractors import LinkExtractor class PuluosiSpider(scrapy.Spider): name = "puluosi" allowed_domains = ["glprop.com.cn"] # start_urls = ["https://www.glprop.com.cn/press-releases.html"] def start_requests(self): yield scrapy.Request("https://www.glprop.com.cn/press-releases.html", self.parse1) yield scrapy.Request("https://www.glprop.com.cn/in-the-news.html", self.parse2) yield scrapy.Request("https://www.glprop.com.cn/proposed-privatization.html", self.parse3) yield scrapy.Request("https://www.glprop.com.cn/our-network/network-detail.html", self.parse4) def parse1(self, response): print("此時(shí)啟動(dòng)的爬蟲(chóng)為:puluosi" ) item=PuluosiNewsItem() web=response.xpath("http://tbody/tr") web.pop(0) for node in web: item["newstitle"] = node.xpath(".//a/text()").extract()[0].strip() print(item["newstitle"]) item["newtiems"] = node.xpath(".//td/text()").extract()[0].strip() print(item["newtiems"]) # urljoin創(chuàng)建絕對(duì)的links路徑,始用于網(wǎng)頁(yè)中的href值為相對(duì)路徑的連接 item["newslink"] = response.urljoin(web.xpath(".//a/@href").extract()[0]) # print(item["newslink"]) yield item #加入try 來(lái)判斷當(dāng)前年份的新聞是否有下一頁(yè)出現(xiàn) try: next_url_tmp = response.xpath("http://div[@class="page"]/a[contains(text(),"下一頁(yè)")]/@href").extract()[0] if next_url_tmp: next_url = "https://www.glprop.com.cn" + next_url_tmp yield scrapy.Request(next_url,callback=self.parse1) except Exception as e: print("當(dāng)前頁(yè)面沒(méi)有下一頁(yè)") href=response.xpath("http://ul[@class="timeList"]/li/a/@href") for nexturl in href: url1 =nexturl.extract() if url1: url="https://www.glprop.com.cn"+url1 yield scrapy.Request(url,callback=self.parse1) def parse2(self,response): item = PuluosiNewsItem() web = response.xpath("http://tbody/tr") web.pop(0) for node in web: item["newstitle"] = node.xpath(".//a/text()").extract()[0].strip() print(item["newstitle"]) item["newtiems"] = node.xpath(".//td/text()").extract()[0].strip() print(item["newtiems"]) # urljoin創(chuàng)建絕對(duì)的links路徑,始用于網(wǎng)頁(yè)中的href值為相對(duì)路徑的連接 item["newslink"] = response.urljoin(web.xpath(".//a/@href").extract()[0]) print(item["newslink"]) yield item #加入try 來(lái)判斷當(dāng)前年份的新聞是否有下一頁(yè)出現(xiàn) try: next_url_tmp = response.xpath("http://div[@class="page"]/a[contains(text(),"下一頁(yè)")]/@href").extract()[0] if next_url_tmp: next_url = "https://www.glprop.com.cn" + next_url_tmp yield scrapy.Request(next_url,callback=self.parse2) except Exception as e: print("當(dāng)前頁(yè)面沒(méi)有下一頁(yè)") href=response.xpath("http://ul[@class="timeList"]/li/a/@href") for nexturl in href: url1 =nexturl.extract() if url1: url="https://www.glprop.com.cn"+url1 yield scrapy.Request(url,callback=self.parse2) def parse3(self,response): item=PuluosiNewsItem() web=response.xpath("http://tbody/tr") web.pop() for node in web: item["newstitle"] = node.xpath(".//a/text()").extract()[0].strip() print(item["newstitle"]) item["newtiems"] = node.xpath(".//td/text()").extract()[0].strip() print(item["newtiems"]) # urljoin創(chuàng)建絕對(duì)的links路徑,始用于網(wǎng)頁(yè)中的href值為相對(duì)路徑的連接 item["newslink"] = response.urljoin(web.xpath(".//a/@href").extract()[0]) print(item["newslink"]) yield item def parse4(self,response): link=LinkExtractor(restrict_xpaths="http://div[@class="net_pop1"]//div[@class="city"]") links=link.extract_links(response) #獲取所有城市的links for i in links: detailurl=i.url yield scrapy.Request(url=detailurl,callback=self.parse5) def parse4(self, response): item = PuluosiItem() citycode=re.findall("var cities =(.*);",response.text ) citycodejson=json.loads(("".join(citycode))) #把每個(gè)城市的id和name取出來(lái)放到一個(gè)字典 dictcity={} for i in citycodejson: citycodename=i["name"] citycodenm=i["id"] dictcity[citycodenm]=citycodename detail=re.findall("var parks =(.*);",response.text ) jsonBody = json.loads(("".join(detail))) list = [] for key1 in jsonBody: for key2 in jsonBody[key1]: tmp=jsonBody[key1][key2] list.append(jsonBody[key1][key2]) for node in list: assetaddress = node["city_id"] item["assetaddress"] = dictcity[assetaddress] # print(item["assetaddress"]) item["assetstitle"] = node["name"] # print(item["assetstitle"]) item["assetgaikuang"] = node["detail_single"].strip().replace(" ", "").replace(" ", "") # print(item["assetgaikuang"]) assetpeople = node["description"] item["assetpeople"] = re.sub(r"<.*?>", "", (assetpeople.strip())).replace(" ", "") item["asseturl"]="https://www.glprop.com.cn/network-city-detail.html?city="+item["assetaddress"] # print(item["assetpeople"]) yield item
然后我順便把頁(yè)面的新聞信息也爬取了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43670.html
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:組件引擎負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動(dòng),并在相應(yīng)動(dòng)作發(fā)生時(shí)觸發(fā)事件。下載器下載器負(fù)責(zé)獲取頁(yè)面數(shù)據(jù)并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。 Scrapy 是用Python實(shí)現(xiàn)一個(gè)為爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。 一、Scrapy框架簡(jiǎn)介 Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。 ...
摘要:通用網(wǎng)絡(luò)爬蟲(chóng)通用網(wǎng)絡(luò)爬蟲(chóng)又稱全網(wǎng)爬蟲(chóng),爬取對(duì)象從一些種子擴(kuò)充到整個(gè)。為提高工作效率,通用網(wǎng)絡(luò)爬蟲(chóng)會(huì)采取一定的爬取策略。介紹是一個(gè)國(guó)人編寫(xiě)的強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)并帶有強(qiáng)大的。 爬蟲(chóng) 簡(jiǎn)單的說(shuō)網(wǎng)絡(luò)爬蟲(chóng)(Web crawler)也叫做網(wǎng)絡(luò)鏟(Web scraper)、網(wǎng)絡(luò)蜘蛛(Web spider),其行為一般是先爬到對(duì)應(yīng)的網(wǎng)頁(yè)上,再把需要的信息鏟下來(lái)。 分類 網(wǎng)絡(luò)爬蟲(chóng)按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),...
摘要:通用網(wǎng)絡(luò)爬蟲(chóng)通用網(wǎng)絡(luò)爬蟲(chóng)又稱全網(wǎng)爬蟲(chóng),爬取對(duì)象從一些種子擴(kuò)充到整個(gè)。為提高工作效率,通用網(wǎng)絡(luò)爬蟲(chóng)會(huì)采取一定的爬取策略。介紹是一個(gè)國(guó)人編寫(xiě)的強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)并帶有強(qiáng)大的。 爬蟲(chóng) 簡(jiǎn)單的說(shuō)網(wǎng)絡(luò)爬蟲(chóng)(Web crawler)也叫做網(wǎng)絡(luò)鏟(Web scraper)、網(wǎng)絡(luò)蜘蛛(Web spider),其行為一般是先爬到對(duì)應(yīng)的網(wǎng)頁(yè)上,再把需要的信息鏟下來(lái)。 分類 網(wǎng)絡(luò)爬蟲(chóng)按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),...
摘要:項(xiàng)目介紹本文將展示如何利用中的異步模塊來(lái)提高爬蟲(chóng)的效率。使用用的爬蟲(chóng)爬取了條數(shù)據(jù),耗時(shí)小時(shí),該爬蟲(chóng)爬取條數(shù)據(jù),耗時(shí)半小時(shí)。如果是同樣的數(shù)據(jù)量,那么爬取條數(shù)據(jù)耗時(shí)約小時(shí),該爬蟲(chóng)僅用了爬蟲(chóng)的四分之一的時(shí)間就出色地完成了任務(wù)。 項(xiàng)目介紹 ??本文將展示如何利用Pyhton中的異步模塊來(lái)提高爬蟲(chóng)的效率。??我們需要爬取的目標(biāo)為:融360網(wǎng)站上的理財(cái)產(chǎn)品信息(https://www.rong36...
閱讀 3291·2021-11-25 09:43
閱讀 2093·2021-09-22 10:02
閱讀 3348·2021-09-06 15:00
閱讀 2305·2019-08-30 15:56
閱讀 2356·2019-08-30 15:54
閱讀 3233·2019-08-30 14:14
閱讀 2268·2019-08-29 17:25
閱讀 2909·2019-08-29 17:16