CoderCastrov logo
CoderCastrov
Твиттер

Как парсить твиты и создавать набор данных с помощью Twint без использования Twitter API

Как парсить твиты и создавать набор данных с помощью Twint без использования Twitter API
просмотров
6 мин чтение
#Твиттер

Описание:

Twint - это продвинутый инструмент для парсинга Twitter, написанный на языке Python, который позволяет парсить твиты с профилей Twitter без использования Twitter API.

В этой статье я расскажу, как я создал огромный набор данных из твитов, спарсенных со всей страны.

twintproject/twint

Без аутентификации. Без API. Без ограничений. Twint - это продвинутый инструмент для парсинга Twitter, написанный на языке Python, который позволяет...

github.com

Примечание: Эта статья подготовит вас к созданию скрипта на производственном уровне.

Установка

Git:

git clone [https://github.com/twintproject/twint.git](https://github.com/twintproject/twint.git)
cd twint
pip3 install . -r requirements.txt

Pip:

pip3 install twint

или

pip3 install --user --upgrade git+https://github.com/twintproject/twint.git@origin/master#egg=twint

Предварительный скрипт:

Скрипт:

import twint
import pandas#Список городов Пакистана
all_cities = ["Баг", "Бхимбер", "куиратта", "Котли", "Мангла", "Мирпур", "Музаффарабад", "Пландри", "Равалакот", "Панч", "Амир\u00a0Чах", "Баздар", "Бела", "Беллпат", "Баг", "Бурдж", "Чагай", "Чах\u00a0Сандан", "Чакку", "Чаман", "Чхатр", "Далбандин", "Дера Бугти", "Дхана Сар", "Дивана", "Дуки", "Души", "Дузаб", "Гаджар", "Гандава", "Гархи Хайро", "Гаррук", "Газлуна", "Гирдан", "Гулистан", "Гвадар", "Гваш", "Хаб Чауки", "Хамидабад", "Харнай", "Хинглаж", "Хошаб", "Испикан", "Джхал", "Джхал Джао", "Джхатпат", "Дживани", "Каланди", "Калат", "Камарарод", "Канак", "Канди", "Канпур", "Капип", "Каппар", "Кароди", "Катури", "Харан", "Хуздар", "Кикки", "Кохан", "Кохлу", "Корак", "Лахри", "Ласбела", "Лиари", "Лоралай", "Мач", "Манд", "Мангучар", "Машки\u00a0Чах", "Маслти", "Мастунг", "Мекхтар", "Меруи", "Мианез", "Мурга Кибзай", "Муса Хел Базар", "Нагха Калат", "Нал", "Насирабад", "Науроз Калат", "Нур Гамма", "Нушки", "Нуттал", "Ормара", "Палантук", "Панджгур", "Пасни", "Пихарак", "Пишин", "Камруддин Карез", "Кила Абдуллах", "Кила Ладгашт", "Кила Сафед", "Кила Саифуллах", "Кветта", "Рахни", "Робат Тана", "Родхан", "Сайндак", "Санджави", "Саруна", "Шабаз Калат", "Шахпур", "Шарам Джогизай", "Шингар", "Шорап", "Сиби", "Сонмиани", "Спезанд", "Спинтанги", "Суи", "Сунтсар", "Сураб", "Тало", "Тумп", "Турбат", "Умарао", "пирМахал", "Утхал", "Витакри", "Вадх", "Вашап", "Васжук", "Якмач", "Жоб", "Астор", "Барамула", "Хунза", "Гилгит", "Нагар", "Скраду", "Шангрила", "Шандур", "Баджаур", "Хангу", "Малаканд", "Мирам Шах", "Мохманд", "Хайбер", "Курам", "Северный Вазиристан", "Южный Вазиристан", "Вана", "Абботтабад", "Аюбия", "Адезай", "Банда Дауд Шах", "Банну", "Батаграм", "Бироте", "Бунер", "Чакдара", "Читрал", "Даргаи", "Дарья Хан", "Дера Исмаил Хан", "Драсан", "Дрош", "Хангу", "Харипур", "Калам", "Карак", "Ханаспур", "Кохат", "Кохистан", "Лакки Марват", "Латамбер", "Нижний Дир", "Мадьян", "Малаканд", "Мансера", "Мардан", "Мастудж", "Монгора", "Наушера", "Пахарпур", "Пешавар", "Сайду Шариф", "Шангла", "Сакесар", "Сваби", "Сват", "Танги", "Танк", "Тхалл", "Тордхер", "Верхний Дир", "Ахмедпур Ист", "Ахмед Нагер Чата", "Алипур", "Арифвала", "Атток", "Басти Малук", "Бхагалчур", "Бхалвал", "Бахавалнагар", "Бахавалпур", "Бхайферу", "Бхаккар", "Буревала", "Чаилианвала", "Чаквал", "Чичаватни", "Чиниот", "Чоук Азам", "Чоук Сарвар Шахид", "Даска", "Дарья Хан", "Дера Гази Хан", "Деравар Форт", "Дхаулар", "Дина Сити", "Динга", "Дипалпур", "Фейсалабад", "Фатех Джанг", "Гадар", "Гхакхар Манди", "Гуджранвала", "Гуджрат", "Гуджар Хан", "Хафизабад", "Харунабад", "Хасилпур", "Хавели Лакха", "Джампур", "Джханг", "Джелум", "Калабаг", "Карор Лал Эсан", "Касур", "Камалия", "Камокей", "Ханевал", "Ханпур", "Хариан", "Хушаб", "Кот Адду", "Джахания", "Джалла Араин", "Джаухарабад", "Лаар", "Лахор", "Лаламуса", "Лаях", "Лодран", "Мамури", "Манди Бахауддин", "Махдум Аали", "Манди Варбуртон", "Майлси", "Миан Чанну", "Минавала", "Мианвали", "Мултан", "Мурри", "Муридке", "Музаффаргарх", "Наровал", "Окара", "Ренала Хурд", "Раджанпур", "Пак Паттан", "Панджгур", "Паттоки", "Пирмахал", "Кила Дидар Сингх", "Рабва", "Райвинд", "Раджанпур", "Рахим Яр Хан", "Равалпинди", "Рохри", "Садикабад", "Сафдар Абад \u0096 (Дхабан Сингх)", "Сахивал", "Сангла Хилл", "Самбериал", "Сараи Аламгир", "Саргодха", "Шакаргарх", "Шафкат Шахид Чоук", "Шейхупура", "Сиалкот", "Сохава", "Суианвала", "Сундар (город)", "Талаганг", "Тарбела", "Такхтбай", "Таксила", "Тоба Тек Сингх", "Вехари", "Вах Кантонмент", "Вазирабад", "Али Бандар", "Баден", "Чачро", "Даду", "Дигри", "Дипло", "Докри", "Гадра", "Гханиан", "Гхауспур", "Готки", "Хала", "Хайдарабад", "Исламкот", "Джакобабад", "Джеймсабад", "Джамшоро", "Джангхар", "Джати (Мугхалбхин)", "Джхудо", "Джунгшахи", "Кандиаро", "Карачи", "Кашмор", "Кети Бандар", "Хайрпур", "Хора", "Клупро", "Хохропур", "Коранги", "Котри", "Кот Сарае", "Ларкана", "Лунд", "Матхи", "Матиари", "Мехар", "Мирпур Баторо", "Мирпур Кхас", "Мирпур Сакро", "Митхи", "Митхани", "Моро", "Нагар Паркар", "Наушара", "Нодеро", "Ноусхеро Фероз", "Навабшах", "Назимабад", "Наокот", "Пенду", "Покран", "Камбар", "Кази Ахмад", "Ранипур", "Ратодеро", "Рохри", "Сайду Шариф", "Сакранд", "Сангхар", "Шададкхот", "Шахбандар", "Шахдадпур", "Шахпур Чакар", "Шикарпур", "Суджавал", "Суккур", "Тандо Адам", "Тандо Аллахяр", "Тандо Баго", "Тар Ахмад Ринд", "Татта", "Туджал", "Умаркот", "Веирваро", "Варах"]def scrape_by_city(keywords, since, outfile):
    unique_cities=set(all_cities) #Чтобы получить уникальные города страны
    cities = sorted(unique_cities) #Сортировка и преобразование типа данных в список
    for city in cities:
        print(city)
        c = twint.Config()
        c.Search = keywords #ключевое слово для поиска
        c.Since = since
        c.Store_csv = True
        c.Output = "./" + outfile
        c.Near = city
        c.Hide_output = True
        c.Count = True
        c.Stats = True
        c.Resume = 'resume.txt'
        twint.run.Search(c)scrape_by_city('', '2020-08-5 15:55:00', 'Pakistan_Tweets_Dataset.csv')

Теперь давайте объясним метод 'scrape_by_city()'.

Прежде всего, мы должны импортировать конфигурацию twint.

Keyword: Я оставил ключевое слово пустым, таким образом, он будет парсить все твиты. В противном случае, если вы нацелены на определенное ключевое слово, вы можете добавить его туда.

Since: В этом аргументе вы добавляете временную метку, с которой вы хотите парсить твиты.

Store_csv: Включите, чтобы сохранить твиты в файл CSV.

Output: Введите имя файла, в котором вы хотите сохранить набор данных.

Near: Здесь вы должны ввести название города.

Hide_output: Если вы не хотите видеть вывод в терминале, что я предпочитаю в продакшене, потому что это замедляет производительность.

Count: Для проверки статуса количества спарсенных твитов.

Resume: Чтобы возобновить парсинг, нам нужно передать последнее значение идентификатора, сохраненное в нашем CSV-файле или месте, где мы храним данные. Ниже приведен скрипт, который поможет вам получить последний идентификатор.

#скрипт для получения последнего значения идентификатора
import pandas as pd
import numpy as npdf = pd.reas_csv('last_hour.csv')
result = df.iloc[[-1]]
print(result)

Получив значение "id", которое будет числом, например, "1298337878339133447". Вы должны сохранить число в файле под названием 'resume.txt'. Разместите файл resume в том же каталоге, где находится исходный скрипт парсинга и присвойте имя файла аргументу. Теперь запустите скрипт и догадайтесь, что парсинг был перезапущен.

Продукция:

Помните, что парсинг может занимать много времени, даже дни, в зависимости от объема твитов и географической области, которую вы обрабатываете. Вот несколько советов по запуску скрипта в продакшн.

Синтаксис:
scp <локальный_файл> <пользователь@удаленный_хост:удаленный_файл>  Пример:
scp ./twint_parser.py  пользователь@удаленный_хост :.
  1. Установите tmux

Начало работы с Tmux

Tmux - это мультиплексор терминала, альтернатива GNU Screen. Другими словами, это означает, что вы можете запустить сеанс Tmux...

linuxize.com

  1. Создайте сеанс tmux, запустите скрипт, отсоедините сеанс и позвольте ему работать.

  2. Наконец, парсинг выполнен. Теперь загрузите набор данных.

Синтаксис:
scp <пользователь@удаленный_хост:удаленный_файл>   <локальный_файл>Пример:
scp  пользователь@удаленный_хост :Tweets_Dataset.csv ./home/пользователь/

Примечание: Иногда Twitter блокирует ваш IP-адрес из-за отправки слишком многих запросов. Рекомендуется использовать несколько ротирующих IP-адресов в продакшн, иначе вы можете столкнуться с проблемой, подобной приведенной ниже. Однако это работает и без ротации IP-адресов в значительной степени.

Экран ошибки

Варианты использования:

Пример:

Заключение:

С большой силой приходит большая ответственность. Теперь у вас есть удивительный набор данных. Что бы вы сделали с ним?

Полезна ли вам эта статья? Поставьте 👏, поделитесь с сообществом, подумайте или я что-то упустил? Поделитесь со мной в комментариях 📝.

Читать далее:

Google Cloud Platform: Основы инфраструктуры

Основы инфраструктуры Google Cloud Platform

Мне была предоставлена возможность изучить основы Google Cloud благодаря DSC SEA Google. Я благодарен моему менеджеру...

medium.comНаймите меня:

Наймите меня:

Вам нужно обойти веб-сайт и собрать данные или выполнить работу по науке о данных? Я готов к работе. Жду вашего ответа.

Connect

Автор - научный сотрудник с увлечением по созданию продуктов, направленных на достижение значимого влияния. Он является дважды экспертом Kaggle. Он является бывшим лидером клуба студентов-разработчиков Google (GDSC) и посолом облачной программы AWS educate. Он любит общаться с людьми. Если вам нравится его работа, поздоровайтесь с ним.

@MrAsimZahid | Научный сотрудник

Эксперт Kaggle | Бывший лидер клуба студентов-разработчиков Google и посол облачной программы AWS Educate

mrasimzahid.github.io