🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ دانشجوی سون‌لرن
خروجی اشتباه
جامعه پایتون (وب) ایجاد شده در ۲۶ مرداد ۱۴۰۲

سلام وقت بخیر

موقعی که این اسکریپت رو ران میکنم total رو به من صفر میده.

وقتی کد‌های html شهر‌های دیگه رو چک کردم دیدم class : hdrlnk که استاد تو قسمت find_link اسکریپتشون استفاده کردن رو فقط شهر پاریس داره و شهر‌های دیگه ای که برای کرول استفاده کردن این کلاس رو نداشتن.

سعی کرد هر شهر رو جداگانه کرول کنم با استفاده کلاس‌های های خودشون ولی باز هم total رو صفر میداد بجز پاریس که خروجیش درست بود

من الان چند روزه درگیر حل این مشکلم

کمکی میتونید بهم بکنید؟

تو قسمت attrs از کلاس‌های دیگه هم استفاده کردم ولی بازم total صفر میشه

import requests
from bs4 import BeautifulSoup
def get_page(url):
    try:
        answer = requests.get(url)
    except:
        return None
    return answer
def find_link(html_doc):
    soup = BeautifulSoup(html_doc, 'html.parser')
    # content = soup.find('div', attrs={'class':'content'})
    # adv_list = soup.find_all('li', attrs={'class':'result-row'})
    return soup.find_all('a', attrs={'class': 'main singleton'})
if __name__ == "__main__":
    # link = 'https://tampa.craigslist.org/search/hhh'
    link = 'https://tampa.craigslist.org/search/hhh#search=1~gallery~71~8'
    response = get_page(link)
    if response.status_code == 200:
        print('200')
        links = find_link(response.text)
        # for li in links:
        #     print(li.get('href'))
        print('total ', len(links))
    else:
        print('try again :)')
Mohammad Ghoreini ۲۷ مرداد ۱۴۰۲، ۱۵:۰۶

سلام،

تمرین شما مشکلی نداشته، موضوع لینک این سایت است که به زبان‌های دیگر ریدایرکت میشود و نسخه ی صفحات متفاوت میشود.

بنابراین بهتره از این لینک استفاده کنید:

link = 'https://{}.craigslist.org/search/hhh?availabilityMode=0&lang=fr&cc=fr#search=1~gallery~0~2'

کافیه از لینک بالا در سورس استاد استفاده کنید.

البته این سورس پایین همان سورس استاد است با کمی تغییر:

import requests
from bs4 import BeautifulSoup
def get_page(session, url):
    """Retrieve a page using the provided session and URL."""
    try:
        response = session.get(url)
        response.raise_for_status()  # Will raise an HTTPError if the HTTP request returned an unsuccessful status code
        return response
    except requests.RequestException as e:
        print(f"Error fetching the URL {url}: {e}")
        return None
def find_links(html_doc):
    """Extract links from the given HTML document."""
    soup = BeautifulSoup(html_doc, 'html.parser')
    return soup.find_all('a', attrs={'class': 'hdrlnk'})
def start_crawl_city(session, url):
    """Crawl a specific city using the provided session and URL."""
    adv_links = list()
    response = get_page(session, url)
    if response:
        adv_links.extend(find_links(response.text))
    return adv_links
def start_crawl():
    """Start crawling a list of predefined cities."""
    cities = ['paris', 'berlin', 'amsterdam', 'munich']
    link = 'https://{}.craigslist.org/search/hhh?availabilityMode=0&lang=fr&cc=fr#search=1~gallery~0~2'
    
    with requests.Session() as session:  # Using a session for connection pooling
        for city in cities:
            links = start_crawl_city(session, link.format(city))
            print(f'{city} total: {len(links)}')
def get_pages_data():
    raise NotImplementedError()
if __name__ == "__main__":
    switch = 'find_links'
    if switch == 'find_links':
        start_crawl()
    elif switch == 'extract_pages':
        get_pages_data()

cf16-cccc.png

بهترین پاسخ
محسن موحد ۲۷ مرداد ۱۴۰۲، ۱۸:۲۱