2017-05-24 41 views
0

我已經寫了一些代碼,以針對某些商店名稱刮取「地址」和「電話」,這些商店名稱工作正常。但是,它有兩個參數來執行它的活動。我希望從csv文件中做同樣的事情,其中​​「名稱」將在第一列,「蓋」將在第二列,收穫的結果將相應地放在第三和第四列。在這一點上,我不知道如何從csv文件執行搜索。任何建議將非常感激。無法從csv文件執行反向網頁搜索

import requests 
from lxml import html 

Names=["Literati Cafe","Standard Insurance Co","Suehiro Cafe"] 
Lids=["3221083","497670909","12183177"] 
for Name in Names and Lids: 
    Page_link="https://www.yellowpages.com/los-angeles-ca/mip/"+Name.replace(" ","-")+"-"+Name 
    response = requests.get(Page_link) 
    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) 

回答

1

您可以從CSV讓您NamesLids列表,如:

import csv 

Names, Lids = [], [] 
with open("file_name.csv", "r") as f: 
    reader = csv.DictReader(f) 
    for line in reader: 
     Names.append(line["Name"]) 
     Lids.append(line["Lid"]) 

(PEP沒關係侵犯現在;))。然後,您可以在代碼的其餘部分使用它,儘管我不確定您的for Name in Names and Lids:循環試圖達到什麼目的,但它不會讓您認爲它是什麼 - 它不會循環訪問列表,但只能通過列表中的Lids

而且優化的第一順序應該是與環比CSV取代你的循環,如:

with open("file_name.csv", "r") as f: 
    reader = csv.DictReader(f) 
    for entry in reader: 
     page_link = "https://www.yellowpages.com/los-angeles-ca/mip/{}-{}".format(entry["Name"].replace(" ","-"), entry["Lid"]) 
     # rest of your scraping code... 
+0

感謝zwer,你的答案。我剛纔測試了你的代碼,它的功能很神奇。你讓我貪心。關於這個的最後一個問題。我如何將填充結果寫入相應的列。我與csv一起工作,但都屬於初級。謝謝萬億。 – SIM

+1

你可以使用'csv.writer()'。儘管在技術上可行,但在讀取文件時更新文件可能會導致受到傷害的世界,因此要麼使用第一個示例來加載您的「Names」和「Leads」列表,然後在循環播放時重新寫入CSV ,或創建臨時CSV文件,向其中寫入更新的內容,然後在完成循環後重寫原始文件。有很多示例如何處理CSV閱讀和寫作:https://docs.python.org/3/library/csv.html – zwer

+0

感謝您的一切。你節省了我數月的努力。 TC。 – SIM