mirror of
https://github.com/timberjoegithub/GoogleScrape.git
synced 2026-07-22 00:19:48 +00:00
see previous
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
import sqlalchemy
|
|
||||||
|
|
||||||
#data
|
#data
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
@@ -41,6 +39,8 @@ import tweepy
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
import sqlalchemy
|
||||||
|
import googlemaps
|
||||||
#import mysqlclient
|
#import mysqlclient
|
||||||
#import mysql-connector-python
|
#import mysql-connector-python
|
||||||
import env
|
import env
|
||||||
@@ -98,9 +98,9 @@ class Posts(Base):
|
|||||||
date = sqlalchemy.Column(sqlalchemy.String(length=64, collation="utf8"))
|
date = sqlalchemy.Column(sqlalchemy.String(length=64, collation="utf8"))
|
||||||
address = sqlalchemy.Column(sqlalchemy.String(length=256, collation="utf8"))
|
address = sqlalchemy.Column(sqlalchemy.String(length=256, collation="utf8"))
|
||||||
dictPostComplete = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
dictPostComplete = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
||||||
googleurl = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
#googleurl = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
||||||
weburl = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
wpurl = sqlalchemy.Column(sqlalchemy.String(length=512, collation="utf8"))
|
||||||
businessurl = sqlalchemy.Column(sqlalchemy.String(length=128, collation="utf8"))
|
businessurl = sqlalchemy.Column(sqlalchemy.String(length=2048, collation="utf8"))
|
||||||
longitude = sqlalchemy.Column(sqlalchemy.Float())
|
longitude = sqlalchemy.Column(sqlalchemy.Float())
|
||||||
latitude = sqlalchemy.Column(sqlalchemy.Float())
|
latitude = sqlalchemy.Column(sqlalchemy.Float())
|
||||||
google = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
google = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
||||||
@@ -112,6 +112,14 @@ class Posts(Base):
|
|||||||
web = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
web = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
||||||
tiktok = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
tiktok = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
|
||||||
#active = sqlalchemy.Column(sqlalchemy.Boolean, default=True)
|
#active = sqlalchemy.Column(sqlalchemy.Boolean, default=True)
|
||||||
|
place_id = sqlalchemy.Column(sqlalchemy.String(length=126, collation="utf8"))
|
||||||
|
googledetails = sqlalchemy.Column(sqlalchemy.String(length=4096, collation="utf8"))
|
||||||
|
#businessurl = sqlalchemy.Column(sqlalchemy.String(length=512, collation="utf8"))
|
||||||
|
pluscode = sqlalchemy.Column(sqlalchemy.String(length=64, collation="utf8"))
|
||||||
|
googleurl = sqlalchemy.Column(sqlalchemy.String(length=512, collation="utf8"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##################################################################################################
|
##################################################################################################
|
||||||
|
|
||||||
@@ -373,6 +381,9 @@ def get_data(driver,outputs ):
|
|||||||
print('Found extra pics')
|
print('Found extra pics')
|
||||||
list_more_pics.click()
|
list_more_pics.click()
|
||||||
elements = driver.find_elements(By.CLASS_NAME, 'jftiEf')
|
elements = driver.find_elements(By.CLASS_NAME, 'jftiEf')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lst_data = []
|
lst_data = []
|
||||||
for data in elements:
|
for data in elements:
|
||||||
name = data.find_element(By.CSS_SELECTOR, 'div.d4r55.YJxk2d').text
|
name = data.find_element(By.CSS_SELECTOR, 'div.d4r55.YJxk2d').text
|
||||||
@@ -399,6 +410,33 @@ def get_data(driver,outputs ):
|
|||||||
except Exception:
|
except Exception:
|
||||||
score = "Unknown"
|
score = "Unknown"
|
||||||
more_specific_pics = data.find_elements(By.CLASS_NAME, 'Tya61d')
|
more_specific_pics = data.find_elements(By.CLASS_NAME, 'Tya61d')
|
||||||
|
|
||||||
|
# Grab more info from google maps entry on this particular review
|
||||||
|
if outputs['postssession'].query(Posts).filter(Posts.name == name,Posts.google != 1) or env.forcegoogleupdate:
|
||||||
|
gmaps = googlemaps.Client(env.googleapipass)
|
||||||
|
place_ids = gmaps.find_place(name+address, input_type = 'textquery', fields='')
|
||||||
|
if len(place_ids['candidates']) == 1 :
|
||||||
|
place_id = place_ids['candidates'][0]['place_id']
|
||||||
|
details = gmaps.place(place_id)
|
||||||
|
#place_id = "ChIJh2OwH6KA54gRZLcx1Cjk8ic"
|
||||||
|
# Get place details
|
||||||
|
# googledetails = gmaps.place(place_id)
|
||||||
|
try:
|
||||||
|
businessurl = (details['result']['website'])
|
||||||
|
latitude = (details['result']['geometry']['location']['lat'])
|
||||||
|
longitude = (details['result']['geometry']['location']['lng'])
|
||||||
|
pluscode = (details['result']['plus_code']['compound_code'])
|
||||||
|
googleurl = (details['result']['url'])
|
||||||
|
update_db_row(name,"businessurl",businessurl,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"latitude",latitude,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"longitude",longitude,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"pluscode",pluscode,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"googleurl",googleurl,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"place_id",place_id,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"googledetails",details,"onlyempty",outputs)
|
||||||
|
update_db_row(name,"google",1,"forceall",outputs)
|
||||||
|
except Exception as error:
|
||||||
|
print('Error writing business details from google maps : ',error)
|
||||||
pics= []
|
pics= []
|
||||||
pics2 = []
|
pics2 = []
|
||||||
# check to see if folder for pictures and videos already exists, if not, create it
|
# check to see if folder for pictures and videos already exists, if not, create it
|
||||||
@@ -411,7 +449,7 @@ def get_data(driver,outputs ):
|
|||||||
# it is full size
|
# it is full size
|
||||||
urlmedia = re.sub('=\S*-p-k-no', '=-no', (re.findall(r"['\"](.*?)['\"]",
|
urlmedia = re.sub('=\S*-p-k-no', '=-no', (re.findall(r"['\"](.*?)['\"]",
|
||||||
lmpics.get_attribute("style")))[0])
|
lmpics.get_attribute("style")))[0])
|
||||||
print ('URL : ',urlmedia)
|
print ('Pic URL : ',urlmedia)
|
||||||
pics.append(urlmedia)
|
pics.append(urlmedia)
|
||||||
# Grab the name of the file and remove all spaces and special charecters to name the
|
# Grab the name of the file and remove all spaces and special charecters to name the
|
||||||
# folder
|
# folder
|
||||||
@@ -569,6 +607,45 @@ def write_to_xlsx2(data, outputs):
|
|||||||
|
|
||||||
##################################################################################################
|
##################################################################################################
|
||||||
|
|
||||||
|
def update_db_row(review_name,column_name,column_value,update_style,outputs):
|
||||||
|
#kwargs = {Posts.column_name : ''}
|
||||||
|
#setattr(Posts, attribute_name, column_name)
|
||||||
|
#randdd = Posts.column_name
|
||||||
|
#filter_db = text('Posts.name == review_name,Posts.column_name == \'\'')
|
||||||
|
try:
|
||||||
|
if update_style == "forceall":
|
||||||
|
outputs['postssession'].query(Posts).filter(Posts.name == review_name).update({column_name : column_value})
|
||||||
|
print (' Force Updated ',column_name, ' to: ',column_value)
|
||||||
|
elif update_style == "onlyempty":
|
||||||
|
#print('Posts.name == review_name,**kwargs')
|
||||||
|
postval = outputs['postssession'].query(Posts).filter(Posts.name == review_name,getattr(Posts,column_name).is_(None)).all()
|
||||||
|
# print ('Postval : ',postval)
|
||||||
|
temp = getattr(Posts,column_name)
|
||||||
|
# print ('temp = ',temp)
|
||||||
|
# print (getattr(Posts,column_name))
|
||||||
|
# db_session.query(Notice).filter(getattr(Notice, col_name).like("%" + query + "%"))
|
||||||
|
if postval:
|
||||||
|
# if outputs['postssession'].query(Posts).filter(Posts.name == review_name,temp.is_(None)).all:
|
||||||
|
# if outputs['postssession'].query(Posts).filter(Posts.name == review_name,Posts.(eval(column_name ))):
|
||||||
|
outputs['postssession'].query(Posts).filter(Posts.name == review_name).update({column_name : column_value})
|
||||||
|
print (' Updated blank ',postval ,' on value',column_name, ' to: ',column_value)
|
||||||
|
elif update_style == "toggletrue":
|
||||||
|
postval = outputs['postssession'].query(Posts).filter(Posts.name == review_name,getattr(Posts,column_name).is_(None)).all()
|
||||||
|
print ('Postval : ',postval)
|
||||||
|
if postval:
|
||||||
|
outputs['postssession'].query(Posts).filter(Posts.name == review_name).update({column_name : column_value})
|
||||||
|
print (' Updated blank on value',column_name, ' to: ',column_value)
|
||||||
|
except Exception as error:
|
||||||
|
print(" Not able to write to post data table to update ",review_name," ",column_name," to: ",column_value , type(error), error)
|
||||||
|
outputs['postssession'].rollback()
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
outputs['postssession'].commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
def database_read(data):
|
def database_read(data):
|
||||||
db_connection_str = 'mysql+pymysql://mysql_user:mysql_password@mysql_host/mysql_db'
|
db_connection_str = 'mysql+pymysql://mysql_user:mysql_password@mysql_host/mysql_db'
|
||||||
db_connection = create_engine(db_connection_str)
|
db_connection = create_engine(db_connection_str)
|
||||||
@@ -1333,7 +1410,7 @@ def process_reviews(outputs):
|
|||||||
if env.web :
|
if env.web :
|
||||||
#if writtento["web"] == 0 :
|
#if writtento["web"] == 0 :
|
||||||
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.web != 1):
|
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.web != 1):
|
||||||
if webcount <= env.postsperrun:
|
if webcount < env.postsperrun:
|
||||||
try:
|
try:
|
||||||
#NewWebPost = post_to_wp(processrow[1].value, processrow[2].value, processrow[2].value ,processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value)
|
#NewWebPost = post_to_wp(processrow[1].value, processrow[2].value, processrow[2].value ,processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value)
|
||||||
NewWebPost = post_to_wp(processrow[1].value, processrow[2].value, outputs['web'] ,processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value)
|
NewWebPost = post_to_wp(processrow[1].value, processrow[2].value, outputs['web'] ,processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value)
|
||||||
@@ -1367,7 +1444,7 @@ def process_reviews(outputs):
|
|||||||
print (' Website: Skipping posting for ',processrow[1].value,' previously written')
|
print (' Website: Skipping posting for ',processrow[1].value,' previously written')
|
||||||
if env.instagram:
|
if env.instagram:
|
||||||
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.instagram != 1):
|
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.instagram != 1):
|
||||||
if instagramcount <= env.postsperrun:
|
if instagramcount < env.postsperrun:
|
||||||
try:
|
try:
|
||||||
print(' Starting to generate Instagram post')
|
print(' Starting to generate Instagram post')
|
||||||
NewInstagramPost = post_to_instagram2(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['instagram'] )
|
NewInstagramPost = post_to_instagram2(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['instagram'] )
|
||||||
@@ -1401,7 +1478,7 @@ def process_reviews(outputs):
|
|||||||
print (' Instagram: Skipping posting for ',processrow[1].value,' previously written')
|
print (' Instagram: Skipping posting for ',processrow[1].value,' previously written')
|
||||||
if env.facebook:
|
if env.facebook:
|
||||||
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.facebook != 1):
|
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.facebook != 1):
|
||||||
if facebookcount <= env.postsperrun:
|
if facebookcount < env.postsperrun:
|
||||||
try:
|
try:
|
||||||
print(' Starting to generate Facebook post')
|
print(' Starting to generate Facebook post')
|
||||||
NewFacebookPost = post_facebook3(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['facebook'] )
|
NewFacebookPost = post_facebook3(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['facebook'] )
|
||||||
@@ -1437,7 +1514,7 @@ def process_reviews(outputs):
|
|||||||
#if writtento["xtwitter"] == 0:
|
#if writtento["xtwitter"] == 0:
|
||||||
# if Posts.query.filter(Posts.name.xtwitter.op('!=')(1)).first()
|
# if Posts.query.filter(Posts.name.xtwitter.op('!=')(1)).first()
|
||||||
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.xtwitter != 1):
|
if outputs['postssession'].query(Posts).filter(Posts.name == processrow[1].value,Posts.xtwitter != 1):
|
||||||
if xtwittercount <= env.postsperrun:
|
if xtwittercount < env.postsperrun:
|
||||||
try:
|
try:
|
||||||
print(' Starting to generate xtwitter post')
|
print(' Starting to generate xtwitter post')
|
||||||
NewxtwitterPost = post_x2(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['posts'] )
|
NewxtwitterPost = post_x2(processrow[1].value, processrow[2].value, processrow[7].value, processrow[3].value, processrow[8].value, processrow[5].value,outputs['posts'] )
|
||||||
|
|||||||
Reference in New Issue
Block a user