Python爬虫類は実戦的にseleniumで登って某観光サイトを取ります。


一、selenium実戦
ここではあまり使わないseleniumの文法しか使えません。他の使い方を補いません。実戦を目的としています。
二、芸竜網を開く
ここを直接クリックしてもいいです。龍ネット
ここはホームページです
在这里插入图片描述
三、正確な目標
私達の目標は鶴壁市です。だからまず検索枠をクリックして北京を削除して鶴壁市に変えます。どうやってseleniumで実現しますか?
pycharmを開けて、龍ネットというpyファイルを新規作成します。先導カバン:

from selenium import webdriver 
import time   #   
driver = webdriver.Chrome()  #     selenium   
driver.get("http://www.elong.com/")  
time.sleep(1)  #     ,    1s,               
driver.maximize_window()  #        
どのように検索ボックスを見つけますか?いろいろな方法があります。xpath、css、JavaScript、jQuery、xpathは簡単ですから、私達はxpathだけを使います。このサイトもxpathを使うことができます。具体的な手順は:
1.F 12、小さい矢印、検索ボックスをクリックします。
在这里插入图片描述
2.クリックしたら、要素の中の位置、右クリックして、コピーして、xpathをコピーします。
在这里插入图片描述
3.pycharmに入り、前に作成したpyファイルに下記のコードを追加します。

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').clear()
#           
4.検索ボックスに「鶴壁市」を追加する

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').send_keys('   ')
5.検索をクリックして、次のページに進みます。

time.sleep(1)
driver.find_element_by_xpath('//*[@id="hotel_sub_tabs"]/span[1]/b').click()  #     
time.sleep(1) #            
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()  #     
6.次のページ
この時、私達は絶望的に発見しました。これらの操作はすべて無駄です。彼女はまだ北京です
在这里插入图片描述 
だから私たちはこうするしかないです。
直接クリックして検索して、このページに入ったら鶴壁を入力します。このいまいましい儀式感のために!!)こうすれば、またそうすればいいです。

from selenium import webdriver
import time   #   
driver = webdriver.Chrome()  #     selenium   
driver.get("http://www.elong.com/")
time.sleep(1)  #     ,    1s,               
driver.maximize_window()  #        
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()  #     
driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').clear()  #        
driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').send_keys('   ')  #           
time.sleep(1)
driver.find_element_by_xpath('//*[@id="sugContent"]/ul/li[1]/div/div[1]/div[1]/span/b').click()  #    
time.sleep(1)
#        ,    xpath  
そして鶴壁市の位置付けに成功しました。
在这里插入图片描述
8.ウェブページを分析し、詳細ページのurlを見つける
私たちはこのようにしてもいいです。
在这里插入图片描述
私たちはこの詳細ページはそれぞれのxpathが違っています。どのようにしてすべての詳細ページを「配慮」することができますか?私たちのrequestsを出してください。そして、これはURLだけです。どうすればいいですか?つづり合わせます
9.応答を見ることによって、応答と元素が同じであることが分かります。何を説明しますか?私たちはxpathを通じて私たちの元素を抽出できます。直接に私たちのxpath選手を出してください。

from lxml import etree
import re
html_data = driver.page_source  #      html_data
ht = ht_ht.xpath('//div[@class="to_detail"]/a/@data-link')  #    url    
10.連結文字列は新しいURLを形成する。
詳細ページをクリックしてURLを確認したら、このようになります。
在这里插入图片描述
研究し発見しますissugtrace=2削除しても実行できますが、xpathで取ったのは後の/31712004/ですので、

for ur in ht:
    new_ul = 'http://www.elong.com' + ur
11.詳細ページのURLを取ったら、要点を入力してからウェブページを分析し、データを抽出し、その後データを保存し、xpathを探している私は先に言わなくてもいいです。

head = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
}
for ur in ht:
    new_ul = 'http://www.elong.com' + ur
    xiangqing_ht = requests.get(new_ul, headers=head).content.decode()  			
    #   requests
	time.sleep(1)  #  1s
    ht_data = etree.HTML(xiangqing_ht) #      xpath HTML  
    tingche = ht_data.xpath('//*[@id="hotelContent"]/div/dl[4]/dd/text()')  #    
            if tingche == []:
                tingche = '    '
            name = ht_data.xpath('/html/body/div[3]/div/div[1]/div[1]/div/h1/text()')[0]  #     
            phine_num = ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/span/text()')  #   
            photo_li = ht_data.xpath('/html/body/div[3]/div/div[2]/div[1]/div[2]/ul[1]/li/img/@src')  #   
            weizhi = ht_data.xpath('//*[@id="map"]/div[1]/div[2]/div[1]/div/div[9]/div[2]/div/p[2]/text()')  #   
            miaoshu = ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/ul/li[2]/div/p/span[1]/text()')
そして私たちはデータを手に入れました。次に、これらのデータはどうやって保存しますか?辞書を使ってjsonに保存できます。私は続けて上に書いた。

dic = {} #       json  
ic[f"{name}"] = {}
dic[f"{name}"][f"{name}   "] = tingche
dic[f"{name}"][f"{name}  "] = phine_num
dic[f"{name}"][f"{name}  "] = weizhi
dic[f"{name}"][f"{name}  "] = miaoshu
path = f"    //{name}"
if not os.path.exists(path):
    os.mkdir(path)
#        
for num, photo in zip(range(len(photo_li)), photo_li):
    if num > 4:
        break
    else:
        with open(f'    //{name}//{name, num + 1}.jpg', 'wb') as f:
            f.write(requests.get(photo).content)  #        
with open(f"    //{name}//    .json", 'w') as f:
      f.write(str(dic))  #  json    
dic = {}  #          ,         
12.データを入手した後、まだ終わっていません。次のページに登ります。まずホームページを滑って一番下の部分に滑ります。

for i in range(4):  # 0 1
     time.sleep(0.5)
     j = (i + 1) * 1000  # 1000 2000
     js_ = f'document.documentElement.scrollTop={j}'
     driver.execute_script(js_)
     time.sleep(5)
13.ホームページに戻り、次のページのxpathを見つけたら、クリックしてください。

driver.find_element_by_xpath('//*[@id="pageContainer"]/a[9]').click()
それから、次のページに入りました。コードがなくなりました。どうすればいいですか?コードがずっと運行されていますので、多くのページのデータが降りてきますか?二つの方法があります
パッケージ関数を同時に取得し、循環的によじ登ります。
そして、なくて…
四、成功
データを取得しました
在这里插入图片描述
おわりに
いろいろな文法の機能を実戦で理解してほしいです。丸暗記ではなく、いろいろな文法を暗記してください。そうすると、あなたは忘れやすいです。実は多くの勉強はこのような方式で勉強できます。
ここで、Python爬虫類については、実際にseleniumで登山して、ある観光サイトの記事を紹介します。Python seleniumはウェブサイトの内容について、以前の文章を検索してください。または、次の関連記事を見てください。これからもよろしくお願いします。