Соскребание страницы Twitter с использованием Unicode Equal Сравнение с ошибками Python - PullRequest
0 голосов
/ 19 августа 2011

Я использую следующий код для получения списка подписчиков пользователя в твиттере:

import urllib
from BeautifulSoup import BeautifulSoup

#code only looks at one page of followers instead of continuing to all of a user's followers
#decided to only use a small sample 

site = "http://mobile.twitter.com/NYTimesKrugman/following"
friends = set()
response = urllib.urlopen(site)
html = response.read()
soup = BeautifulSoup(html)
names = soup.findAll('a', {'href': True})
for name in names:
    a = name.renderContents()
    b = a.lower()
    if ("http://mobile.twitter.com/" + b) == name['href']:
        c = str (b)
        friends.add(c)

for friend in friends:
    print friend
print ("Done!")

Однако я получаю следующие результаты:

NYTimeskrugman
nytimesphoto
rasermus

Warning (from warnings module):
   File "C:\Users\Public\Documents\Columbia Job\Python Crawler\Twitter     Crawler\crawlerversion14.py", line 42
    if ("http://mobile.twitter.com/" + b) == name['href']:
 UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
amnesty_norge
zynne_
fredssenteret
oljestudentene
solistkoret

.... (и так продолжается)

Может показаться, что я смог получить большинство из следующих имен, но получил несколько случайную ошибку.Однако это не помешало завершению кода ... Я надеялся, что кто-нибудь сможет просветить меня относительно того, что случилось?

1 Ответ

0 голосов
/ 02 ноября 2016

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

Я думаю, что лучше сделать другой выбор с классом "username ", чтобы рассматривать только имена подписчиков!

Вот материал:

import requests
from bs4 import BeautifulSoup

site = "http://mobile.twitter.com/paulkrugman/followers"
friends = set()
response = requests.get(site)
soup = BeautifulSoup(response.text)
names = soup.findAll('a', {'href': True})
for name in names:
    pseudo = name.find("span", {"class": "username"})
    if pseudo:
        pseudo = pseudo.get_text()
        friends.add(pseudo)

for friend in friends:
    print (friend)
print("Done !")

@ paulkrugman появляется в каждом наборе, поэтому не забудьте удалить его!

...