【问题标题】:python: range not being executedpython:范围没有被执行
【发布时间】:2017-10-05 04:41:09
【问题描述】:

应用程序执行但范围不执行。在我的 CSV 文件中,它只显示第一个条目。在抓取其他字段时,我也遇到过索引超出范围的错误。任何帮助,将不胜感激。我在学。

import requests  
import csv  
from bs4 import BeautifulSoup


f = csv.writer(open('salons.csv', 'w'))  
f.writerow(['Name'])

pages = []


    for i in range(0, 10600):  
url = 'http://www.aveda.com/locator/get_the_facts.tmpl?SalonID=' + str(i) +' '  
    pages.append(url)

for item in pages:  
    page = requests.get(item)  
    soup = BeautifulSoup(page.text, 'lxml')  

salon_name_list = soup.find(class_='getthefacts__store_meta_info--store_phone')  
    salon_name_list_items = salon_name_list.find_all('li', class_='phone')  

for salon_name in salon_name_list_items:  
    names = salon_name.contents[0]

f.writerow([names])

【问题讨论】:

  • for i in range(0, 10600): 行上下的缩进不正确。即使 for 正确对齐,由于 url 没有缩进,它不在 for 循环内,所以 for 循环将自行运行,然后 uurl = 将被调用
  • 谢谢,马修。我的格式正确,但不知道如何将代码正确粘贴到此处。您是否发现任何其他可能导致问题的错误?

标签: arrays python-2.7 csv web-scraping beautifulsoup


【解决方案1】:

您尝试查找电话号码的方式不是您应该做的。电话号码在类名phone 下的a 标记内。试试这个。它将获取您感兴趣的电话号码:

import requests ; import csv
from bs4 import BeautifulSoup

outfile = open('salons.csv','w')
writer = csv.writer(outfile)
writer.writerow(['Name'])

for i in range(0, 10600):  
    url = 'http://www.aveda.com/locator/get_the_facts.tmpl?SalonID={0}'.format(i)
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'lxml')
    for salon_name in soup.select('.phone a'):
        names = salon_name.text
        print(names)
        writer.writerow([names])
outfile.close()

【讨论】:

    【解决方案2】:

    不确定您是如何缩进代码的。在问题中正确格式化。而且你可能不需要两个 for 循环。

    import requests
    import csv
    from bs4 import BeautifulSoup
    
    f = csv.writer(open('salons.csv', 'w'))
    f.writerow(['Name'])
    
    for i in range(0, 10600):  
        url = 'http://www.aveda.com/locator/get_the_facts.tmpl?SalonID=' + str(i) +'/'
        page = requests.get(url)
        soup = BeautifulSoup(page.text, 'lxml')
        salon_name_list = soup.find(class_='getthefacts__store_meta_info--store_phone')
        salon_name_list_items = salon_name_list.find_all('li', class_='phone')
        for salon_name in salon_name_list_items:
            names = salon_name.contents[0]
            f.writerow([names])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多