Привет, я создаю небольшой скребок, который ползает по ресторану tripadvisor и заполняет их электронные письма в CSV-файл.
Как ни странно, мой код работает примерно на 300 URL из моего списка, который я проанализировал и перестал работать. Я попытался запустить cli снова, и он просто завершит функцию после написания заголовка. Ниже приведен код для справки. Заранее извиняюсь, если я не могу дать это в лучшем контексте.
# -*- coding: utf-8 -*-
import pandas as pd
import csv
from bs4 import BeautifulSoup
from selenium import webdriver
from fake_useragent import UserAgent
import requests
import time
import re
import logging
#request domain
domain = 'https://www.tripadvisor.com.my'
ua = UserAgent(verify_ssl=False)
header = {'User-Agent':str(ua.chrome)}
#extracting data from excel file that were parsed
df = pd.read_csv('./data/url_parser.csv')
#calculating the length of the total restaurants that were parsed.
total_restaurants = len(df)
debug = False
if debug:
limit = 100
else:
limit = None
#writing data into excel file
with open('./data/content_parser.csv', 'a') as csvfile:
fieldnames = [
'restaurant_id',
'email'
]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
#for each url in the parsed data, scrape the url website
for index, u in enumerate(df['url'][:limit]):
restaurant_id = df['restaurant_id'][index]
print('process = {}/{}'.format(index+1, total_restaurants))
r = requests.get(u, headers=header)
soup = BeautifulSoup(r.text, 'html.parser')
# block = the block that we wanted to get the website url from
block = soup.find('div', {'class':"restaurants-detail-overview-cards-LocationOverviewCard__detailLink--iyzJI restaurants-detail-overview-cards-LocationOverviewCard__contactItem--1flT6"})
email = soup.select('a[href^=mailto]')
for i in email:
href=i['href']
try:
str1, str2 = href.split(':')
except ValueError:
break
#appended email that removes all the html code.
email.append(str2)
#pasting the data scraped and putting into use.
writer.writerow(
{
'restaurant_id':restaurant_id,
'email':str2
}
)
time.sleep(15)