Всех приветствую!
Практикуюсь на парсере Avito, собственно первый - это файл парсера объявлений, с последующим сохранением информации, в csv файл, а именно: "имя объявления", "цена", "дата публикации" и "ссылка".
Второй - это файл отвечает за парсинг картинки с номером телефона и в дальнейшем при помощи библиотеки tesseract-ocr перевод в строку.
Импортировал второй файл в первый и проблема с тем, чтобы его туда грамотно и работоспособно прикрутить.
Чтобы первый файл добравшись до первого объявления открыл его и спарсил также картинку с номером, с дальнейшем переводом в текст, а также сохранением в тот же csv табличку.
Подскажите как его туда прикрутить, или есть ли вариант работы с csv файлами таким образом, чтобы во втором файле я мог ссылаться на таблицу csv, где были уже спарсены ссылки на объявления?
Заранее большое спасибо, всем откликнувшимся! Не закидывайте помидорами, зеленый еще в этом деле :)
Первый файл.
import requests
from bs4 import BeautifulSoup
import csv
from number import Bot
def get_html(url):
r = requests.get(url)
return r.text
def get_total_pages(html):
soup = BeautifulSoup(html, 'lxml')
pages = soup.find('div', class_='pagination-pages').find_all('a', class_='pagination-page')[-1].get('href')
total_pages = pages.split('=')[1].split('&')[0]
return int(total_pages)
def write_csv(data):
with open('avito.csv', 'a', errors='ignore') as f:
writer = csv.writer(f, delimiter=';')
writer.writerow( (data['title'],
data['price'],
data['published'],
data['url']))
def get_page_data(html):
soup = BeautifulSoup(html, 'lxml')
ads = soup.find('div', class_='js-catalog_serp').find_all('div', class_='item_table')
for ad in ads:
name = ad.find('div', class_='description').find('h3').text.strip().lower()
if 'бытовка' in name:
try:
title = ad.find('div', class_='description').find('h3').text.strip()
#print(title)
except:
title = ''
try:
url = 'https://www.avito.ru' + ad.find('div', class_='description').find('h3').find('a').get('href').strip()
print(url)
except:
url = ''
try:
price = ad.find('div', class_='about').text.strip()
print(price)
except:
price = ''
try:
published = ad.find('div', class_='item-date').text.strip()
print(published)
except:
published = ''
data = {'title': title,
'price': price,
'published': published,
'url': url}
write_csv(data)
else:
continue
def main():
url = "https://www.avito.ru/irkutsk?q=%D0%B2%D0%B0%D0%B3%D0%BE%D0%BD%D1%87%D0%B8%D0%BA+%D0%B1%D1%8B%D1%82%D0%BE%D0%B2%D0%BA%D0%B0&p=1"
base_url = 'https://www.avito.ru/irkutsk?'
category_part = 'q=%D0%B2%D0%B0%D0%B3%D0%BE%D0%BD%D1%87%D0%B8%D0%BA+%D0%B1%D1%8B%D1%82%D0%BE%D0%B2%D0%BA%D0%B0&'
page_part = 'p='
total_pages = get_total_pages(get_html(url))
for i in range(1, total_pages + 1):
url_gen = base_url + category_part + page_part + str(i)
print(url_gen)
html = get_html(url_gen)
get_page_data(html)
if __name__ == '__main__':
main()
Второй файл.
from selenium import webdriver
from time import sleep
from PIL import Image
from pytesseract import image_to_string
class Bot(object):
def __init__(self):
self.driver = webdriver.Firefox()
self.navigate()
def take_screenshot(self):
self.driver.save_screenshot('avito_screenshot.png')
def vagon_recon(self):
image = Image.open('vagon.gif')
print(image_to_string(image))
def crop(self, location, size):
image = Image.open('avito_screenshot.png')
x = location['x']
y = location['y']
width = size['width']
height = size['height']
image.crop((x, y, x + width, y + height)).save('vagon.gif')
self.vagon_recon()
def navigate(self):
self.driver.get('')
button = self.driver.find_element_by_xpath('//button[@class="button-button-2Fo5k button-size-l-3LVJf button-primary-1RhOG width-width-12-2VZLz"]')
button.click()
sleep(3)
self.take_screenshot()
image = self.driver.find_element_by_class_name('contacts-phone-3KtSI')
location = image.location
size = image.size
self.crop(location, size)
def main():
b = Bot()
if __name__ == '__main__':
main()