一、背景:
一個做展會的小夥伴兒找到我,希望能幫他採集某一類目的1688廠家信息,然後邀請他們參加展會。
二、設計思路如下:
- 採用 Python3 語言編碼 , 工具 PyCharm;
- 模仿真實用戶登錄1688,使用Selenium + Google Chrome + chromedriver.exe;
備註1:Google Chrome + chromedriver.exe版本對應參考鏈接:https://blog.csdn.net/lildkdkdkjf/article/details/106871954
備註2:Selenium是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。
- 對1688的超頻次訪問限制策略,採用sleep等待重試的策略解決。
- 以excel表格的形式保存結果。
三、功能實現:
def get_url_list(self):
beginPage = 1
while beginPage < 100:
try:
httpDone = ('http://s.1688.com/company/company_search.htm?n=y&netType=1,11&encode=utf-8&keywords=%s&beginPage=%d') % (
self.keyword_encode, beginPage)
print("parsettt 頁碼", beginPage, httpDone)
self.browser.get(httpDone)
nodes = self.browser.find_elements_by_xpath('//a[@class="list-item-title-text"]')
if len(nodes) == 0:
print("parsettt 未找到節點------------------", beginPage)
if self.browser.page_source.find("滑動一下馬上回來") >=0 :
seconds = random.randint(self.min_seconds, self.max_seconds)
print("parsettt sleep s,程序被限制,滑動一下馬上回來 ", seconds, beginPage)
time.sleep(seconds)
continue
else :
print("parsettt 結束 exit---------------------", beginPage)
break
else:
self.url_list = []
print("parsettt 找到節點----------------", len(nodes), len(self.url_list))
for node in nodes:
url = node.get_attribute('href')
title = node.get_attribute('title')
# 去重處理
if url not in self.url_list:
self.url_list.append(url)
for url in self.url_list:
self.save_gys_info(url)
beginPage = beginPage + 1
print("////////////////////////////////////////")
except Exception as e:
print("error", e)
time.sleep(30)
-
配置文件
{
"chrome": "",
"chromedriver": "chromedriver.exe",
"keyword": "服裝",
"min_seconds": 600,
"max_seconds": 720
}
-
結果展示
四、總結
節前實現了這個功能,交付給了小夥伴兒,他很滿意,因爲他節省了時間和精力去做更有創造力的事情。
本次分享結束,歡迎討論!QQ微信同號: 6550523
本文章僅供技術交流,不得商用,不得轉載,違者必究。