簡體   English   中英

使用beautifulsoup 抓取數據問題

[英]issue scraping data using beautifulsoup

我試圖從 yelp 中抓取數據,特別是納什維爾餐館的名稱、地址、價格和評級。 我正在使用beautifulsoup。 我有兩個循環來收集數據。 第二個循環正在工作,但第一個循環僅適用於少數幾個。 我認為這與課程有關。 我已經嘗試了我能想到的所有課程組合,但我仍然無法讓它發揮作用。

這是我從https://www.yelp.com/search?find_desc=Restaurants&find_loc=Nashville%2C+TN抓取的地方

這是github上的代碼

當我打印每個列表時,這些是這些結果(如果找不到任何東西,它會添加“無”):第一行是公司名稱,第二行:評級,第三行:價格,第四行:地址

我注意到數據是由 javascript 提取的所以我使用了這個返回 json 的調用來獲取數據。

它更快更干凈

import requests , os , csv
from urllib.parse import urljoin

def SaveAsCsv(list_of_rows):
  try:
    with open('data.csv', mode='a',  newline='', encoding='utf-8') as outfile:
      csv.writer(outfile).writerow(list_of_rows)
  except PermissionError:
    print("Please make sure data.csv is closed\n")


def Search():
  payload = {
        'find_desc': 'Restaurants',
        'find_loc': 'Nashville, TN',
        'start': 30, #if you want second page set start to 60 and so on
        'parent_request_id': 'f3d6966567be99d1',
        'request_origin': 'user'}
  res = requests.get(url, params=payload)
  if res.status_code == 200:
    return res.json()

def Extract():
  try:
    JsonObj          = Search()
    Data             = JsonObj['searchPageProps']['searchResultsProps']['searchResults']
    if Data is not None:
      for index , item in enumerate(Data,1):
        print('getting item {} out of {}'.format(index,len(Data)))
        if item.get('searchResultBusiness','') :
          name   = item['searchResultBusiness']['name']
          rating = item['searchResultBusiness']['rating']
          price  = item['searchResultBusiness']['priceRange']
          rank   = item['searchResultBusiness']['ranking']
          review = item['searchResultBusiness']['reviewCount']
          phone  = item['searchResultBusiness']['phone']
          busUrl = urljoin(url ,item['searchResultBusiness']['businessUrl'])
          SaveAsCsv([name,rating,price,rank,review,phone,busUrl])
  except Exception as e:
    print(e)


url = 'https://www.yelp.com/search/snippet'
if os.path.isfile('data.csv') and os.access('data.csv', os.R_OK):
  print("File data.csv Already exists \n")
else:
  SaveAsCsv([ 'name','rating','priceRange','ranking','reviewCount','phone','businessUrl'])
Extract()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM