Разбор Алексы для получения информации о ранге - PullRequest
0 голосов
/ 05 января 2020

Из Alexa я хочу извлечь целое число, связанное с <REACH RANK="1"/>. Что я имею в виду:

<!--
    Need more Alexa data?  Find our APIS here: https://aws.amazon.com/alexa/
-->
<ALEXA VER="0.9" URL="google.com/" HOME="0" AID="=" IDN="google.com/">
  <SD TITLE="A" FLAGS="" HOST="google.com">
    <OWNER NAME="aa"/>
  </SD>
  <SD>
    <POPULARITY URL="google.com/" TEXT="1" SOURCE="panel"/>
    <REACH RANK="1"/>
    <RANK DELTA="+0"/> 
    <COUNTRY CODE="US" NAME="United States" RANK="1"/>
  </SD>
</ALEXA>

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

То, что у меня есть в данный момент:

 try:
    xml = (BeautifulSoup(urllib.request.urlopen("http://data.alexa.com/data?cli=10&dat=snbamz&url=" + url).read(), "xml"))

    rank = re.search(r'"<REACH[^>]*RANK="(\d+")', xml)
    print(rank)
    print(f'Your rank for {url} is {rank}')
 except Exception as err:
    print(err)
    rank = -1
    #print(f'Your rank for {url} is {rank}')

Это либо 1) Хит исключения, либо 2) Результат этой ошибки:

expected string or bytes-like object

1 Ответ

0 голосов
/ 05 января 2020

Поскольку вы используете BeautifulSoup, вы можете проанализировать его с помощью xml. Примерно так:

import requests
from bs4 import BeautifulSoup

endpoint = 'http://data.alexa.com/data'

url = 'insert the value you are using here'

data = dict(
    cli=10,
    dat=snbamz,
    url=url
)

r = requests.get(url, data=data)

soup = BeautifulSoup(r.content, 'xml')

rank = soup.REACH.get('RANK')

Это не полный пример, но я надеюсь, что его можно использовать в качестве отправной точки, откуда вы сможете развиваться оттуда.

Вот подтверждение концепции:

Python 3.7.5 (default, Dec 15 2019, 17:54:26) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from bs4 import BeautifulSoup
>>> alexa = '''
... <!--
...     Need more Alexa data?  Find our APIS here: https://aws.amazon.com/alexa/
... -->
... <ALEXA VER="0.9" URL="google.com/" HOME="0" AID="=" IDN="google.com/">
...   <SD TITLE="A" FLAGS="" HOST="google.com">
...     <OWNER NAME="aa"/>
...   </SD>
...   <SD>
...     <POPULARITY URL="google.com/" TEXT="1" SOURCE="panel"/>
...     <REACH RANK="1"/>
...     <RANK DELTA="+0"/> 
...     <COUNTRY CODE="US" NAME="United States" RANK="1"/>
...   </SD>
... </ALEXA>
... '''
>>> soup = BeautifulSoup(alexa, 'xml')
>>> rank = soup.REACH.get('RANK')
>>> rank
'1'
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...