Pythonは宝を洗う商品の情報の欄の実現を登ります。


一、関連知識点
1.1、Selenium
Seleniumは強力なオープンソースWeb機能テストツールシリーズであり、テストキットの読み込み、テストの実行、およびテスト結果の記録を行うことができます。実際のユーザー操作をシミュレートして、ブラウズページ、リンク、入力テキスト、フォームの提出、マウスイベントのトリガなどの操作を含みます。つまり、テストケースで予想されるユーザーの行動と結果を説明しさえすれば、自動化で実行できる機能テストキットが得られます。
1.2、アクションウォッチ
アクションchainsはseleniumの中でマウス関連の操作を専門に処理します。例えば、マウスの移動、マウスボタン操作、ボタンとコンテキストメニュー(マウスの右ボタン)が相互作用します。これは、より複雑な動作をするために非常に役立ちます。例えば、ストップやドラッグなどです。
1.3、タイム
現在のタイムスタンプを返します。
1.4、lxml
lxmlはPythonライブラリです。XMLとHTMLファイルを簡単に処理できます。また、webのwebの取得にも使えます。既存のXML解像度は市販されていますが、より良い結果を得るために、開発者は自分のXMLやHTML解析器を作成したい場合があります。この時はlxml庫が役に立ちます。このライブラリの主な利点は、大規模なドキュメントを解析する際には非常に速く、保存も非常に良く、簡単な変換方法を提供して、データをPythonデータタイプに変換し、ファイルの操作を容易にすることです。
1.5、csv
csvファイルフォーマットは、一般的な表計算ドキュメントとデータベースのインポートエクスポート形式です。最近、RPC処理サーバのデータを呼び出した時、データをアーカイブしてこの便利なフォーマットを使う必要があります。
1.6、requests
Requestsライブラリは優雅で簡単なPython HTTPライブラリであり、主にHTTP要求の送信と処理に用いられる。
二、部分コード解析
Chromeドライバを読み込み、動的に解析して登るURL

 #          api
 def commonsdk(self,url):
 browser = webdriver.Chrome('D:/chromedriver.exe')
 try:
 browser.get(url)
 except Exception as e:
 browser.execute_script('window.stop()') #         
 print(e, 'dynamic web load timeout')
 return browser;
アナログ登録を実現
宝を洗ってインターフェースのurlのフォームの枠に上陸することを位置付けますを通じて(通って)、自分のユーザー名とパスワードを入力して、更にマウスをなぞらえ似せてイベントをクリックして、続いてフォームの情報を提出してユーザーの登録を実現します。

#    
 def logon(self,url,a_href_list_next):
 username = "     "
 password = "  "
 browser1 = self.commonsdk(url)
 #    
 browser1.find_element_by_id('fm-login-id').send_keys(username)
 browser1.find_element_by_id('fm-login-password').send_keys(password)
 #        
 browser1.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
 #      
 self.Buy_information(a_href_list_next,browser1)
サイドバーのディレクトリを取得します。
1、まずディレクトリの分類バーに位置して、マウスカーソルを選択する欄に移動します。すると、隠しdivが現れます。(ここではマウスのペンディングを実現する必要があります。)action.move(u)to_elementlist..perform()はこの機能を実現しました。
2、自分が必要としているサイドバーの行または複数行を特定し、マウスのサスペンションを実現してからその内容を取得します。
3、そのハイパーリンクを取得して次のインターフェースに入ります。

#    
 def List(self,url):
 browser = self.commonsdk(url)
 #ActionChains        、  、     
 action = ActionChains(browser)
 li_list = browser.find_elements_by_css_selector('.service-bd li')[1]
 #        ,        
 action.move_to_element(li_list).perform()
 time.sleep(5)

 #       div
 div_list = browser.find_element_by_css_selector('.service-fi-links')
 #         
 h5_list = div_list.find_elements_by_css_selector('h5')
 #        
 p_list = div_list.find_elements_by_css_selector('p')
 #  a  
 a_href_list = div_list.find_elements_by_css_selector('a')
 #  a      
 a_href_list_next = div_list.find_elements_by_css_selector('a')[1].get_attribute('href')

 print(li_list.text)
 for j in range(len(p_list)):
 if j<len(p_list):
 print(h5_list[j].text)
 print(p_list[j].text)
 for i in range(len(a_href_list)):
 print(a_href_list[i].get_attribute('href'))

 #     
 logon = browser.find_element_by_id('J_SiteNavBd')
 #         
 logon_url = logon.find_element_by_css_selector('a').get_attribute('href')
 #        
 browser.close()
 self.logon(logon_url,a_href_list_next)
商品情報を取得する
1、ここで使用する位置決め方式はXpath方式で、絶対位置決めを使ってラベルの位置を取得します。

#      
 def Buy_information(self,url,browser):
 browser.get(url)
 div_list = browser.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]')
 img = div_list.find_element_by_css_selector('img')
 img_url = "https:"+img.get_attribute('data-src')
 price = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[1]').text
 number = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[2]').text
 shoping_information = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[2]').text
 shop = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[1]/a').text
 adress = div_list.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[3]/div[2]').text
 path = self.img_baocun(img_url)
 data={
 '    ':path,
 '  ':price,
 '    ':number,
 '    ':shoping_information,
 '  ':shop,
 '  ':adress
 }
 self.write_dictionary_to_csv(data,'information')
画像をダウンロード
取得した画像のurlを通じて、指定されたフォルダに画像をダウンロードします。

#    
 def img_baocun(self,url):
 root = "        "//        
 path = root + url.split('?')[0].split('/')[-1].strip('')#  jpg   
 #         ,      
 if not os.path.exists(root):
 os.mkdir(root)
 #         ,      
 if not os.path.exists(path):
 r = requests.get(url)
 r.raise_for_status()
 with open(path,'wb') as f:
 f.write(r.content)
 return path
よじ登る必要がある情報をcsvファイルに書き込み、確認しやすいです。
1、商品情報は辞書の形式でcsvファイルに書いてあります。見やすいです。

#        (    )    csv  
 def write_dictionary_to_csv(self,dict,filename):
 #      
 file_name='{}.csv'.format(filename)
 with open(file_name, 'a',encoding='utf-8') as f: 
 file_exists = os.path.isfile(filename)
 #delimiter(   ) 
 w =csv.DictWriter(f, dict.keys(),delimiter=',', quotechar='"', lineterminator='
',quoting=csv.QUOTE_ALL, skipinitialspace=True) if not file_exists : w.writeheader() w.writerow(dict) print(' csv !')
三、プログラムの考え方
1、まずサイドバーの位置を決めてから、actions.move_を使います。to_elementlist.perform()の方法はマウスのダイナミックなサスペンションを実現して、隠れたdivに表示させて、その中の情報を取得します。
2、次に模擬登録の機能を実現し、アカウントに登録し、その中の商品情報を取得する(タオバオのアンチステーキメカニズムのため、複数回ログインするとユーザーがコードをスキャンして登録されるので、この機能はまだ実現されていない)
3、商品情報の取得はXpathの絶対位置付け方式で取得する。
Xpathの使い方:
 右キーの位置を指定するラベル->Copyオプションを選択->Copy Xpath
四、発展空間
1、タオバオの反ステーキメカニズムの問題を解決します。トランスポートゲート
2、ファイルの書き込みは他の方式に変えます。
ここで、Pythonがtaobao商品の情報欄に登って、実現した文章について紹介します。これに関連して、Pythonがtaobao商品の情報を取得した内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。