Po zalogowaniu się na stronie internetowej chcę zebrać swoje linki. To robię z tą funkcją (przy użyciu bibliotek mechanizacji i URLPARSE):

br = mechanize.Browser()

.
. #logging in on website
.

for link in br.links():
    url = urlparse.urljoin(link.base_url, link.url)

    hostname = urlparse.urlparse(url).hostname
    path = urlparse.urlparse(url).path

    #print hostname #by printing this I found it to be the source of the None value

    mylinks.append("http://" + hostname + path)

I otrzymuję ten komunikat o błędzie:

    mylinks.append("http://" + hostname + path)
TypeError: cannot concatenate 'str' and 'NoneType' objects

Nie jestem pewien, jak to naprawić, a nawet jeśli można go naprawić. Czy jest jakiś sposób, aby zmusić funkcję do dołączenia, nawet gdyby wytworzyć niepełnosprawny i dziwny wynik dla wartości Brak?

Alternatywnie, co naprawdę jestem po linku, z czym kończy się link. Na przykład kod HTML dla jednego z linków wygląda tak (co jestem po świecie "Lexik"):

<td class="center">
    <a href="http://UnimportantPartOfLink/lexik>>lexik</a>
</td>

Więc alternatywna trasa byłaby, jeśli zmechanizuj może po prostu zebrać tę wartość bezpośrednio, omijając linki i brak kłopotów

6
user3053161 1 grudzień 2013, 21:26

2 odpowiedzi

Najlepsza odpowiedź

Inny dobry sposób bez próby, z wyjątkiem bloku -

Wymień hostname = urlparse.urlparse(url).hostname z

hostname = urlparse.urlparse(url).hostname or ''

I podobnie ścieżka = urlparse.urlparse(url).path z

path = urlparse.urlparse(url).path or ''

Mam nadzieję że to pomoże !

5
Arovit 2 grudzień 2013, 06:19

Dlaczego nie użyj bloku try/except?

try:
    mylinks.append("http://" + hostname + path)
except TypeError:
    continue

Jeśli jest błąd, pomińby dołączenie dołączania i kontynuować pętlę.

Mam nadzieję że to pomoże!

4
aIKid 1 grudzień 2013, 17:43