Проект Scraping для начинающих: Как преобразовать идентификаторы Twitter в имена пользователей? - PullRequest
0 голосов
/ 21 февраля 2019

Благодаря @ BittoBennichan я смог собрать эту маленькую штуку на питоне, которая очищает идентификаторы пользователей, помеченные в сообщениях, опубликованных в Twitter:

from bs4 import BeautifulSoup
from selenium import webdriver
import time

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# go to page
driver.get("http://twitter.com/XXXXXX/media")

#You can adjust it but this works fine
SCROLL_PAUSE_TIME = 2

# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height


# Now that the page is fully scrolled, grab the source code.
src = driver.page_source

#Past it into BS
soup = BeautifulSoup(src, 'html.parser')
divs = soup.find_all('div',class_='account')

#PRINT RESULT
#print('printing results')
#for div in divs:
#    print(div['data-user-id'])


#SAVE IN FILE
print('Saving results')    
with open('file.txt','w') as f:
   for div in divs:
        f.write(div['data-user-id']+'\n')   

Так что программа работает отлично.Он получает идентификаторы и печатает их или записывает их в текстовый файл.Теперь я могу вставить этот список идентификаторов в Calc и добавить сводную таблицу, чтобы увидеть, сколько раз каждый отдельный тег был помечен.НО!У меня все еще есть некоторые проблемы:

-Я получаю только идентификаторы, а не имена пользователей.Теперь, что было бы проще: собирать имена пользователей одновременно с тем, как я собираю идентификаторы и складывать их вместе в файл?Или конвертировать файл ID в файл имени пользователя поздно?И как будет возможно это последнее решение?

- Я не могу прокручивать бесконечно.Я вернулся в сентябрь 2018 года, но это все.Это просто говорит «Вернуться к началу».Это потому, что я не вошел в Twitter или из-за каких-то встроенных ограничений?

Если у вас есть какие-либо комментарии, идеи и т. Д., Любая помощь будет принята с благодарностью.Спасибо!

РЕДАКТИРОВАТЬ1: Я нашел это (Tweepy) решение от здесь :

def get_usernames(ids):
    """ can only do lookup in steps of 100;
        so 'ids' should be a list of 100 ids
    """
    user_objs = api.lookup_users(user_ids=ids)
    for user in user_objs:
        print(user.screen_name)

Так как мой список длиннее 100, я должен сделать это:

Для большего набора идентификаторов вы можете просто поместить это в цикл for и вызывать соответственно, соблюдая ограничение API Twitter.

1 Ответ

0 голосов
/ 22 февраля 2019

Ваш код не генерировал идентификаторы для меня, поэтому изначально не смог протестировать эти решения.Не уверен, что проблема в том, что я не изучал это, но кажется, что мой исходный HTML не имеет никакого class='account'.Поэтому я изменил это в коде так, чтобы просто сказать: «Найти все теги div, имеющие атрибут« data-user-id »:

 divs = soup.find_all('div', {"data-user-id" : re.compile(r".*")})

1) Чтобы иметь CSV, вы можете просто написать исохранить как csv, а не как txt. Другой вариант - создать фрейм данных с идентификаторами, а затем использовать pandas для записи в csv с df.to_csv('path/to/file.csv')

2) Поместить это в список довольно легко, так какхорошо.

Создание списка идентификаторов - for Петля

#TO PUT INTO LIST (FOR LOOP)
id_list = []
for div in divs:
    id_list.append(div['data-user-id'])

print (id_list)

Создание списка идентификаторов - понимание списка

#TO PUT INTO LIST (LIST COMPREHENSION)
id_list = [ div['data-user-id'] for div in divs ]

Запись в CSV

#SAVE IN FILE
import csv
print('Saving results')    
with open('file.csv','w', newline='') as f:
    writer = csv.writer(f)
    for div in divs:
        writer.writerow([div['data-user-id']])   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...