محمد
محمد

Reputation: 57

problem in web scabing using BeautifulSoup

my problem is i can't catch the divs of class listing_LinkedListingCard__5SRvZ i use find_all however the result is empty list

the link :https://sa.aqar.fm/%D9%81%D9%84%D9%84-%D9%84%D9%84%D8%A8%D9%8A%D8%B9/%D8%A8%D8%B1%D9%8A%D8%AF%D8%A9

my code

import requests
from bs4 import BeautifulSoup
import time

web_page = requests.get("https://sa.aqar.fm/%D9%81%D9%84%D9%84-%D9%84%D9%84%D8%A8%D9%8A%D8%B9/%D8%A8%D8%B1%D9%8A%D8%AF%D8%A9")

def main(page):
    src = page.content
    soup = BeautifulSoup(src, 'lxml')
    house_details = []

    houses= soup.find_all("div",{'class':'listing_LinkedListingCard__5SRvZ'})
    print(houses)
    


main(web_page)

any help ?

how i fix it then ?

Upvotes: 1

Views: 46

Answers (2)

Andrej Kesely
Andrej Kesely

Reputation: 195438

In this case I've managed to get the information with changing the User-Agent header. It might work in your case too. If not, you must find other ways to circumvent the Cloudflare protection (using selenium, using proxies, etc.)

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"
}
url = "https://sa.aqar.fm/%D9%81%D9%84%D9%84-%D9%84%D9%84%D8%A8%D9%8A%D8%B9/%D8%A8%D8%B1%D9%8A%D8%AF%D8%A9"

src = requests.get(url, headers=headers).content
soup = BeautifulSoup(src, "html.parser")

houses = soup.find_all("div", {"class": "listing_LinkedListingCard__5SRvZ"})
for h in houses:
    print(h.h4.text)

Prints:

فيلا للبيع في شارع عمرو ابن شجيرة ، حي النازية ، بريدة ، بريدة
فيلا للبيع في شارع التغيرة ، حي القويع ، بريدة ، بريدة
فيلا للبيع في حي الرحاب ، بريدة ، بريدة
فيلا للبيع في شارع الشقه العليا 1418 ، حي السليمانية ، بريدة ، بريدة
فيلا للبيع في حي الاخضر ، بريدة ، بريدة
فيلا للبيع في شارع إبراهيم بن موسي الزويد ، حي النخيل ، بريدة ، بريدة
فيلا للبيع في شارع الحزم 72 ، حي الحزم ، بريدة ، بريدة
فيلا للبيع في شارع هجره عسيلان 1065 ، حي النقيب الجنوبي ، بريدة ، بريدة
فيلا للبيع في شارع الأمير سلطان بن عبدالعزيز ، حي البصر ، بريدة ، بريدة
فيلا للبيع في شارع عيون الجواء ، حي الريان ، بريدة ، بريدة
فيلا للبيع في شارع الهيتي ، حي الريان ، بريدة ، بريدة
فيلا للبيع في شارع معتوق البغدادي ، حي الريان ، بريدة ، بريدة
فيلا للبيع في شارع عمرو ابن سفيان ، حي الشقة ، بريدة ، بريدة
فيلا للبيع في شارع واسط 90 ، حي واسط ، بريدة ، بريدة
فيلا للبيع في شارع المنصوريه ، حي الريان ، بريدة ، بريدة
فيلا للبيع في شارع الحزم 72 ، حي الحزم ، بريدة ، بريدة
فيلا للبيع في شارع ثعلية الأسدي ، حي الرفيعة ، بريدة ، بريدة
فيلا للبيع في شارع الورود 60 ، حي الورود ، بريدة ، بريدة
فيلا للبيع في حي الفايزية ، بريدة ، بريدة
فيلا للبيع في شارع الجبرين ، حي الروضه ، بريدة ، بريدة

Upvotes: 0

Nora Macher
Nora Macher

Reputation: 29

Your scraping is blocked by cloudflare, check soup.title.

When you are using the requests api, you are sending a User-Agent string that tells the server that you are not a regular browser:

web_page.request.headers
>> {'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}

Upvotes: 1

Related Questions