0

これは私がこれまでに持っているコードです:

from grp import struct_group
from bs4 import BeautifulSoup   
import requests 
import pandas as pd   
import urllib.parse 

name = []
price = []
mileage = []
dealer_name =[]
source = []



for i in range (1,13):
        #Allow to Crawl multiple pages:
        website="https://www.cars.com/shopping/results/?page=" + str(i) + '&page_size=20&dealer_id=&keyword=&list_price_max=&list_price_min=&makes[]=&maximum_distance=all&mileage_max=&sort=best_match_desc&stock_type=used&year_max=&year_min=&zip=95355'
        #Requesting using requests lib 
        response = requests.get(website)

        soup = BeautifulSoup(response.content, 'html.parser')
        #Finding results 
        results = soup.find_all('div', {'class':'vehicle-card'})   
        url_combine = []
        root_url="http://www.cars.com"   
        url_combine = root_url , source
        
        
        for result in results:    
            # name
            try:
                name.append(result.find('h2').get_text()) 
            except:
                name.append('n/a')
            #price 
            try:
                price.append(result.find('span', {'class':'primary-price'}).get_text())
            except:
                price.append('n/a')
            
            # mileage
            try:
                mileage.append(result.find('div', {'class':'mileage'}).get_text())
            except:
                mileage.append('n/a')
            # dealer_name
            try:
                dealer_name.append(result.find('div', {'class':'dealer-name'}).get_text().strip())
            except:
                dealer_name.append('n/a')
            #link
            try:
                source.append(result.find('a', {'class':'vehicle-card-visited-tracking-link'}).get('href'))
            except:
                source.append('n/a')
        for link in source:
            url_combine.append(urllib.parse.urljoin(root_url, link))
            

#Using Pandas to create a dictionary and import to Excel
car_listings = pd.DataFrame({'Name': name, 'Mileage':mileage, 'Price': price, 'Dealer Name':dealer_name,'Link': source})
car_listings.to_excel('car_listings_page4.xlsx')

しかし、私はそれが言うところで問題に遭遇し続けます AttributeError: 'tuple' object has no attribute 'append'.

私はすべてを作る必要があることを知っています list の代わりに tuple しかし、自分の間違いがどこにあるかを見つけることができないようです。 これは完全なURLを取得する1つの方法だと思います href. もしそうなら、コードに実装できる他の方法はありますか?

新しい寄稿者

賞賛 は、このサイトの新しい寄稿者です。 説明を求めたり、コメントしたり、答えたりする際には注意してください。 私たちをチェックしてください 行動規範.

2

  • url_combine = root_url , source – それはタプルです。その行を削除または編集して、 url_combine.append(urllib.parse.urljoin(root_url, link)) エラーを出さない

    2日前

  • 問題を見つけやすくするために、コードを修正してください。 次のガイドラインに従って、 最小限の再現可能な例.

    コミュニティ
    ボット

    2日前

3

これらをすべて避ける lists と使用 dicts 代わりに、より構造化された方法で情報を簡素化して保存します-使用することもできます if-statement.

文字列連結を実行するには、さまざまな方法があります。

  • + オペレーター
  • join() 方法
  • % オペレーター
  • format() 関数
  • f-string リテラル文字列補間 (への割り当ての例を確認してください) website)

ただし、最も単純なものは使用しています + オペレーター:

root_url+link

私の例について dicts 次のようになります。

'link': root_url+result.find('a', {'class':'vehicle-card-visited-tracking-link'}).get('href') if result.find('a', {'class':'vehicle-card-visited-tracking-link'}) else None

または少し短く walrus operator (Python 3.8 以降):

'link': root_url+a.get('href') if (a:=result.find('a', {'class':'vehicle-card-visited-tracking-link'})) else None

from bs4 import BeautifulSoup
import requests
import pandas as pd

root_url="http://www.cars.com"
data = []

for i in range (1,2):
        website =f'https://www.cars.com/shopping/results/?page={i}&page_size=20&dealer_id=&keyword=&list_price_max=&list_price_min=&makes[]=&maximum_distance=all&mileage_max=&sort=best_match_desc&stock_type=used&year_max=&year_min=&zip=95355'
        response = requests.get(website)

        soup = BeautifulSoup(response.content, 'html.parser')
        results = soup.find_all('div', {'class':'vehicle-card'})   

        for result in results:

            data.append({
                'name': result.find('h2').get_text() if result.find('h2') else None,
                'price': result.find('span', {'class':'primary-price'}).get_text() if result.find('span', {'class':'primary-price'}) else None,
                'link': root_url+a.get('href') if (a:=result.find('a', {'class':'vehicle-card-visited-tracking-link'})) else None
                ### all the other info
            })

pd.DataFrame(data)

出力

名前 価格 リンク
0 2017 レクサス IS 200t ベース $28,900 http://www.cars.com/vehicledetail/6942c51b-c26c-4614-97f1-acb0b7517b82/
1 2021 リンカーン コルセア リザーブ $43,797 http://www.cars.com/vehicledetail/e575219a-90fa-4a95-ade5-d2740e746cd0/
2 2021 ヒュンダイ IONIQ ハイブリッド SE $26,997 http://www.cars.com/vehicledetail/716b65ec-3abd-42e4-b19b-9024d2ad58f1/
3 2021 GMC ユーコン XL デナリ $74,888 http://www.cars.com/vehicledetail/475045f6-142a-440f-80e7-2c3ae289fee2/
4 2007 シボレー シルバラード 1500 $12,688 http://www.cars.com/vehicledetail/56080319-0bb9-49e0-8758-24f58d0d5d76/

0

    あなたの答え

    賞賛 新しい投稿者です。 親切に、そして私たちをチェックしてください 行動規範.

    ゲストとして投稿する

    必須ですが表示されません


    「回答を投稿する」をクリックすることにより、あなたは私たちの 利用規約プライバシーポリシークッキーポリシー

    あなたが探している答えではありませんか? タグ付けされた他の質問を閲覧する python-3.x ウェブスクレイピング 美しいスープ 連結 また 自分の質問をする.