Получение данных с сервера при очистке сайта - PullRequest
0 голосов
/ 28 марта 2019

Я извлек элементы из определенного веб-сайта и теперь хочу записать их в файл .xls.

Я ожидал полный лист Excel с заголовками и строками информации, но получил лист только с заголовками.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

res = requests.get('https://www.raywhite.com/contact/?type=People&target=people&suburb=Sydney%2C+NSW+2000&radius=50%27%27&firstname=&lastname=&_so=contact')
soup = bs(res.content, 'lxml')

names=[]
positions=[]
phone=[]
emails=[]
links=[]

nlist = soup.find_all('li', class_='agent-name')
plist= soup.find_all('li',class_='agent-role')
phlist = soup.find_all('li', class_='agent-officenum')
elist = soup.find_all('a',class_='val withicon')

for n1 in nlist:
    names.append(n1.text)
    links.append(n1.get('href'))
for p1 in plist:
    positions.append(p1.text)
for ph1 in phlist:
    phone.append(ph1.text)
for e1 in elist:
    emails.append(e1.get('href'))


df = pd.DataFrame(list(zip(names,positions,phone,emails,links)),columns=['Names','Position','Phone','Email','Link'])
df.to_excel(r'C:\Users\laptop\Desktop\RayWhite.xls', sheet_name='MyData2', index = False, header=True)

Вот как выглядит итоговый DataFrame:

enter image description here

1 Ответ

0 голосов
/ 28 марта 2019

Я попытался распечатать результаты ваших суповых вызовов, например nlist = soup.find_all('li', class_='agent-name'), и возвращаю пустые массивы.Функции супа не находят никаких данных.

Глядя дальше, запрос супа возвращается пустым:

soup = bs(res.content, 'lxml')
print(soup) 

дает:

<html>
<head><title>429 Too Many Requests</title></head>
<body bgcolor="white">
<center><h1>429 Too Many Requests</h1></center>
<hr/><center>nginx</center>
</body>
</html>

Похоже, что сайт обнаруживает вас как бота, а непозволяя тебе скрести.Вы можете притвориться, что вы являетесь веб-браузером, следуя приведенному здесь ответу: Очистка веб-страниц с Python с использованием ошибки BeautifulSoup 429

ОБНОВЛЕНИЕ:

Добавление агента пользователя в запросделает трюк:

res = requests.get('https://www.raywhite.com/contact/?type=People&target=people&suburb=Sydney%2C+NSW+2000&radius=50%27%27&firstname=&lastname=&_so=contact', headers = {'User-agent': 'Super Bot 9000'})

Теперь вы получите желаемый результат.

enter image description here

Некоторые веб-сайты отклоняют запросы, в которых нет агента пользователя, и кажется, что этот сайт делает это.Добавление пользовательского агента делает ваш запрос более нормальным, поэтому сайт разрешает его выполнение.Там действительно нет никакого стандарта на это или что-то, это зависит от сайта к сайту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...