2017-05-25 18 views
0

NameとLidに基づいて特定の店舗の住所と電話番号を削っているスクリプトを作成しました。それが検索しているのは、名前と蓋がそれぞれcsvファイルの列Aと列Bに格納されているということです。しかし、検索に基づいて結果をフェッチした後、2番目のイメージに表示されているように、結果をそれぞれC列とD列に入れることを期待しました。この時点で、私は立ち往生した。私は3番目と4番目の列を読み書きメソッドを使って操作する方法を知らないので、そこにデータを配置する必要があります。私は今、これをしようとしている:csvファイルの3番目と4番目の列にスクラップした結果を保存できません

import csv 
import requests 
from lxml import html 
Names, Lids = [], [] 
with open("mytu.csv", "r") as f: 
    reader = csv.DictReader(f) 
    for line in reader: 
     Names.append(line["Name"]) 
     Lids.append(line["Lid"]) 
with open("mytu.csv", "r") as f: 
    reader = csv.DictReader(f) 
    for entry in reader: 
     Page = "https://www.yellowpages.com/los-angeles-ca/mip/{}-{}".format(entry["Name"].replace(" ","-"), entry["Lid"]) 
     response = requests.get(Page) 
     tree = html.fromstring(response.text) 
     titles = tree.xpath('//article[contains(@class,"business-card")]') 
     for title in titles: 
      Address= title.xpath('.//p[@class="address"]/span/text()')[0] 
      Contact = title.xpath('.//p[@class="phone"]/text()')[0] 
      print(Address,Contact) 

をどのように私のcsvファイルは、現在のようになります。

enter image description here

答えて

1

次のことができます。私の所望の出力のようなものである

enter image description here

これは好きですか? 2つの列を追加して、入力csvに基づいたヘッダを持つ新鮮な出力csvファイルを作成します。 csvの行を読むと辞書として利用できます。この場合はentryとなります。あなたは、ネット上で収集したものからこの辞書に新しい値を追加することができます。次に、新しく作成した各行をファイルに書き出します。

import csv 
import requests 
from lxml import html 
with open("mytu.csv", "r") as f, open('new_mytu.csv', 'w', newline='') as g: 
    reader = csv.DictReader(f) 
    newfieldnames = reader.fieldnames + ['Address', 'Phone'] 
    writer = csv.writer = csv.DictWriter(g, fieldnames=newfieldnames) 
    writer.writeheader() 
    for entry in reader: 
     Page = "https://www.yellowpages.com/los-angeles-ca/mip/{}-{}".format(entry["Name"].replace(" ","-"), entry["Lid"]) 
     response = requests.get(Page) 
     tree = html.fromstring(response.text) 
     titles = tree.xpath('//article[contains(@class,"business-card")]') 
     #~ for title in titles: 
     title = titles[0] 
     Address= title.xpath('.//p[@class="address"]/span/text()')[0] 
     Contact = title.xpath('.//p[@class="phone"]/text()')[0] 
     print(Address,Contact) 
     new_row = entry 
     new_row['Address'] = Address 
     new_row['Phone'] = Contact 
     writer.writerow(new_row) 
+0

あなたの素晴らしく堅牢で効果的なソリューションをお寄せいただきありがとうございます。あなたがしたことは私の期待を超えています。ありがとうございました。 – SIM

+0

大歓迎です。それを健康に使用してください! –

+0

もう1つ、Bill Bell。あなたの暇な時間に、ここで質問された質問に答えてほしいと思います。 "https://stackoverflow.com/questions/44076626/itertools-within-web-crawler-giving-wrong-triples"にリンクしてください – SIM

関連する問題