1. 程式人生 > >python2.7爬取大眾點評 模擬滑鼠 python第二天含原始碼

python2.7爬取大眾點評 模擬滑鼠 python第二天含原始碼

*第二天是指寫部落格的第二天

創作背景

對於新手來說最快的學習方法就是看專案,在百度搜索python爬蟲基本都是爬大眾點評的,不知道這個網站做錯了什麼被這麼多人爬。接下來博主興沖沖的找了幾個有程式碼的部落格,改了改就測試,但是結果無非就是網站不能正常訪問啊,需要拖動驗證之類的,還有的就是隻有頭尾兩部分,總之沒有看到想要的結果,看來大眾點評這幾年也在反爬蟲上下了功夫。但是博主就跟他槓上了,無奈水筆博主選擇了用selenium包來模擬人為操作,從主介面開始。

基本思路

訪問大眾點評從主頁開始,然後選擇鐘意分類,讓driver開啟大眾點評主頁,找到美食元素,ActionChains(driver

)懸停,定位到日本菜ActionChains(driver)點選。

 這之後會出現一個新視窗,需要將driver定位到這個視窗。一位博主告訴我的,感謝他。

程式碼執行過程中開啟的視窗都可以通過driver獲取,然後迭代定位。

之後就是主要內容了,都在<li>標籤中,通過driver找到所有<li>標籤,然後迭代內容

本頁結束後,嘗試尋找下一頁標籤,找到就點選,找不到就結束了。

博主把爬取到的內容存在專案檔案中,目錄要準確。要在project資料夾建檔案才行,否則會被認為配置檔案放到你找不到的地方,博主的電腦太慢了,爬了一會桌布都出來了,反正可以用,就不等了哈哈。一共爬了18頁的,內容大家可以根據需要改。

程式碼

程式碼是博主東拼西湊➕刪刪改改的,不知道光顧了多少人的部落格,我就不一一答謝了,希望能夠幫到大家。如果那位大羅金仙飄過,一定要點化晚輩啊,感激不盡。

# -*- coding:utf-8 -*-
import re
import time
from bs4 import BeautifulSoup
import json
import threading
from requests import Session
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
class dazp_bj:

	def setUp(self):
		# 除錯的時候用firefox比較直觀
		# self.driver = webdriver.PhantomJS()
		self.driver = webdriver.Firefox()
		self.filename = 'D:\python\project\japanese.json' #儲存位置
	def testEle(self):
		driver = self.driver
		driver.maximize_window()
		driver.get(r"http://www.dianping.com")#driver定位到主介面
		attrible = driver.find_element_by_link_text("美食")
		ActionChains(driver).move_to_element(attrible).perform()#滑鼠懸停動作
		time.sleep(1)                                       #防止被判定為機器
		attrible = driver.find_element_by_link_text("日本菜")   #選擇二級分類
		ActionChains(driver).click(attrible).perform()
		_json=dict()	#定義一個字典用以儲存數
		time.sleep(1)
		current_window = driver.current_window_handle  # 獲取當前視窗handle name
		all_windows = driver.window_handles  # 獲取所有視窗handle name
		# 切換window,如果window不是當前window,則切換到該window
		for window in all_windows:
			if window != current_window:
				driver.switch_to.window(window)
		print driver.title  # 列印該頁面title
		time.sleep(10)     #等待頁面完全載入,否則資料不全,可根據電腦配置改變

		while True:    #while if 模仿 都while
			soup = BeautifulSoup(driver.page_source, 'lxml') #獲取當前頁面全部內容
			name=['商家名稱','評論數量','人均消費','地址','評分','連結']
			for li in soup.find('div',class_="shop-wrap").find('div',id="shop-all-list").ul.find_all('li'): #迭代商家
				info=li.find('div',class_='txt')
				_json[name[0]]=info.find('div',class_='tit').a.h4.get_text().encode('utf-8')
				_json[name[1]]=int(info.find('div',class_='comment').find('a',class_="review-num").b.get_text().encode('utf-8'))
				_json[name[2]]=int(re.sub('¥','',info.find('div',class_='comment').find('a',class_="mean-price").b.get_text().encode('utf-8')))
				_json[name[3]]=info.find('div',class_='tag-addr').find('span',class_='tag').get_text().encode('utf-8')+info.find('div',class_='tag-addr').find('span',class_='addr').get_text().encode('utf-8')
				_json[name[4]]=float(info.find('span',class_='comment-list').find_all('b')[0].get_text())+float(info.find('span',class_='comment-list').find_all('b')[1].get_text())+float(info.find('span',class_='comment-list').find_all('b')[2].get_text())
				_json[name[5]]=info.find('div',class_='tit').a['href']
				with open(self.filename,'a') as outfile:  #追加模式
					json.dump(_json,outfile,ensure_ascii=False)
				with open(self.filename,'a') as outfile:
					outfile.write(',\n')
			if driver.find_element_by_css_selector("a[class= \"next\"][title=\"下一頁\"]"):  #css選擇器查詢
				driver.find_element_by_css_selector("a[class= \"next\"][title=\"下一頁\"]").click()
				time.sleep(10)
				continue
			elif driver.find_element_by_link_text("下一頁"):   #text查詢
				driver.find_element_by_link_text("下一頁").click()
				time.sleep(10)
				continue
			else:
				break
if __name__=='__main__':
	a = dazp_bj()
	a.setUp()
	a.testEle()

*爬蟲的過程中不要動滑鼠,最好將游標放到邊緣。

 有問題留言,我盡力幫助

更多機會與學習資料加入下方QQ群

相關推薦

python2.7大眾點評 模擬滑鼠 python第二原始碼

*第二天是指寫部落格的第二天 創作背景 對於新手來說最快的學習方法就是看專案,在百度搜索python爬蟲基本都是爬大眾點評的,不知道這個網站做錯了什麼被這麼多人爬。接下來博主興沖沖的找了幾個有程式碼的部落格,改了改就測試,但是結果無非就是網站不能正常訪問啊,需要拖動驗證之

python2.7爬蟲例項詳細介紹之大眾點評的資料

一.Python作為一種語法簡潔、面向物件的解釋性語言,其便捷性、容易上手性受到眾多程式設計師的青睞,基於python的包也越來越多,使得python能夠幫助我們實現越來越多的功能。本文主要介紹如何利用python進行網站資料的抓取工作。我看到過利用c++和java進行爬蟲的

Scrapy大眾點評

BE info enable each city wow64 news 數據 windows 最近想吃烤肉,所以想看看深圳哪裏的烤肉比較好吃,於是自己就開始爬蟲咯。這是個靜態網頁,有反爬機制,我在setting和middlewares設置了反爬措施 Setting # -

Python爬蟲實戰專案一】大眾點評團購詳情及團購評論

1 專案簡介 從大眾點評網收集北京市所有美髮、健身類目的團購詳情以及團購評論,儲存為本地txt檔案。 技術:Requests+BeautifulSoup 以美髮為例:http://t.dianping.com/list/beijing?q=美髮 爬取內容包括: 【團購詳情】團購名稱、原

大眾點評之初步試探

常規的反爬機制有訪問頻率限制、cookie限制、驗證碼、js加密引數等。目前解決不了的js加密是今日頭條的_signature引數、京東的s引數(在搜尋結果的ajax中,返回的結果根據s引數的不同而不同,目前沒有發現規律)、新版12306登陸時的callback引數等 而今天的網站的反爬

大眾點評之獲取商家地址

昨天爬取大眾點評的文章 昨天試探性的爬取了大眾點評的數字資訊,但一般我們獲取的資料中,不止是這些數字資訊。在基本資訊裡面,地址也是一個很重要的資料。於是今天嘗試一下怎麼獲取地址。 思路和數字是一樣的,概括就是,通過css檔案裡的偏移量找到class屬性和svg檔案中的漢字的對應關係。

Python大眾點評成都資料,只為告訴你哪家火鍋最好吃

冬天到了,天氣越來越冷,小編起床越來越困難了,每一天都想吃辣辣的火鍋。成都到處都是火鍋店,有名的店,稍微去晚一點,排隊都要排好久,沒聽說的店,又怕味道不好。那麼如何選擇火鍋店呢?最簡單的肯定是在美團。大眾點評上找一找啊。所以,本文就從大眾點評上爬取了成都的火鍋資料,來進行了分析。 Python學

大眾點評資料

通過觀察每個城市的連結主要區別於ranKld,每個城市有特定的ID,因此先獲取到相應城市的ID,便可進行後續抓取。 獲取到的城市ID為: [“上海”,“fce2e3a36450422b7fad3f2b90370efd71862f838d1255ea693b9

Python 大眾點評 50 頁資料,最好吃的成都火鍋根本想不到!

    成都到處都是火鍋店,有名的店,稍微去晚一點,排隊都要排好久,沒聽說的店,又怕味道不好。 那麼如何選擇火鍋店呢?最簡單的肯定是在美團。大眾點評上找一找啊。所以,本文就從大眾點評上爬取了成都的火鍋資料,來進行了分析。   &nbs

python爬蟲 大眾點評中所有行政區內的商戶 將獲取資訊存於excle中

import xlwt ''' 爬取網頁時直接出現403,意思是沒有訪問許可權 ''' import requests from bs4 import BeautifulSoup #入口網頁 start_url = 'https://www.dianping.com/se

Python利用scrapy框架,大眾點評部分商鋪資料~

分享一下,自己從0開始,用python爬取資料的歷程。希望可以可以幫到一起從0開始的小夥伴~~加油。首先,我的開發環境是:電腦:macOS Sierra 10.12.6 編譯器:PyCharm + 終端我的電腦自帶的Python版本為2.7,我下載了一個Python3.6。使

Python3爬蟲實戰:大眾點評網某地區所有酒店相關資訊

歷時一下午加一晚上,終於把這個爬蟲程式碼寫好,後面還有很多想完善的地方(譬如資料儲存用redis、使用多執行緒加快速度、爬取圖片、細分資料等等),待有空再做更改,下面是具體的步驟與思路: 工具:PyC

python大眾點評網商家資訊以及評價,並將資料儲存到excel表中(原始碼及註釋)

import requests from bs4 import BeautifulSoup import traceback # 異常處理 import xlwt # 寫入xls表 # Cookie記錄登入資訊,session請求 def get_content(url,he

Python3爬蟲:大眾點評網北京所有酒店評分資訊

學習Python3爬蟲實戰:爬取大眾點評網某地區所有酒店相關資訊,我爬取的北京地區的酒店,由於網站更新,原文中的一些方法已經不再適用,我的工作是在該文指導下重寫了一個爬蟲。 爬蟲無非分為這幾塊:分析目標、下載頁面、解析頁面、儲存內容,其中下載頁面不提。

python2 scrapy-redisd搭建,簡單使用。豆瓣點評

Scrapy 和 scrapy-redis的區別 Scrapy 是一個通用的爬蟲框架,但是不支援分散式,Scrapy-redis是為了更方便地實現Scrapy分散式爬取,而提供了一些以redis為基礎的元件(僅有元件)。 Scrapy-redis提供了下面四種元件(com

python3.7 QQ空間好友

cgi urlencode version == tab pan ont 訪問權限 host 使用selenium庫自動登錄,記錄登錄的Cookie。以下URL分別代表不同的動作,雖然沒有全用。 留言:https://user.qzone.qq.com/proxy/dom

如何使用免費爬蟲軟體抓大眾點評商家電話資訊!請勿洩露資訊!

本文主要介紹如何使用后羿採集器的 智慧模式 ,免費採集大眾點評商家的地址、人均、評價、電話等資訊。 採集工具簡介: 后羿採集器是一款基於人工智慧技術的網頁採集器,只需要輸入網址就能夠自動識別網頁資料,無需配置即可完成資料採集,是業內首家支援三種作業系統(包括Windows、Mac和Linux

Python3.7騰訊地圖關鍵詞位置及電話資訊

朋友創業需要拓展客戶,閒來無事幫朋友搞些資料,網上看到的全是爬取百度地圖的資料,無奈百度地圖AK一直申請不來,便摸索著做個騰訊地圖的小爬蟲,些許小感慨:資料時代,共享無限,隱私難藏啊! 實現功能 通過指定關鍵詞,自動搜尋騰訊地圖全國範圍內的相關位置及電話資訊,並將結果輸出

python代理ip抓大眾點評

抓大眾點評才抓了幾頁就被遮蔽,找到如下方法解決。 第一步:獲取代理ip 在http://www.xicidaili.com/nn獲取代理,命名為proxy_ip.py,程式碼如下: # coding:utf-8 import requests from bs4 import

Python2.7 淘寶爬蟲selenium 模擬瀏覽器

encoding=utf8 import re from pyquery import PyQuery as pq from selenium import webdriver from selenium.webdriver.common.by import By from