Как я могу добавить свой процесс веб-очистки, используя bs4, к автоматизации селена в Python, чтобы сделать его одним процессом, который просто запрашивает почтовый индекс? - PullRequest
0 голосов
/ 09 апреля 2020

Я использую селен для go на веб-сайте, а затем go для кнопки поиска, введите почтовый индекс, который я ввожу заранее, а затем для этого почтового индекса я хочу ссылку, что веб-страница должна кормить мой веб-скребок созданный с использованием красивого супа, и как только ссылка появляется, я могу собрать необходимые данные, чтобы получить свой CSV.

Что я хочу: у меня возникают проблемы с получением этой ссылки на красивый URL супа. Я в основном хочу автоматизировать это так, чтобы мне просто нужно было ввести почтовый индекс, и это дает мне мой CSV.

Что я могу получить: я могу ввести почтовый индекс и искать с использованием селена, а затем добавить этот URL в мой скребок, чтобы дать CSV.

Код, который я использую для селена:

driver = webdriver.Chrome('/Users/akashgupta/Desktop/Courses and Learning/Automating Python and scraping/chromedriver')
driver.get('https://www.weather.gov/')
messageField = driver.find_element_by_xpath('//*[@id="inputstring"]')
messageField.click()
messageField.send_keys('75252')
time.sleep(3)
showMessageButton = driver.find_element_by_xpath('//*[@id="btnSearch"]')
showMessageButton.click()


#web scraping Part:


url="https://forecast.weather.gov/MapClick.php?lat=32.99802500000004&lon=-96.79775499999994#.Xo5LnFNKgWo"
res= requests.get(url)
soup=BeautifulSoup(res.content,'html.parser')
tag=soup.find_all('div',id='seven-day-forecast-body')
weekly=soup.find_all(class_='tombstone-container')
main=soup.find_all(class_='period-name')
description=soup.find_all(class_='short-desc')
temp=soup.find_all(class_='temp')
Period_Name=[]
Desc=[]
Temp=[]
for a in range(0,len(main)):
    Period_Name.append(main[a].get_text())
    Desc.append(description[a].get_text())
    Temp.append(temp[a].get_text())
df = pd.DataFrame(list(zip(Period_Name, Desc,Temp)),columns =['Period_Name', 'Short_Desc','Temperature']) 

enter image description here

1 Ответ

1 голос
/ 09 апреля 2020
from selenium import webdriver
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome('chromedriver.exe')
driver.get('https://www.weather.gov/')
messageField = driver.find_element_by_xpath('//*[@id="inputstring"]')
messageField.click()
messageField.send_keys('75252')
time.sleep(3)
showMessageButton = driver.find_element_by_xpath('//*[@id="btnSearch"]')
showMessageButton.click()

WebDriverWait(driver, 10).until(EC.url_contains("https://forecast.weather.gov/MapClick.php")) # here you are waiting until url will match your output pattern

currentURL = driver.current_url
print(currentURL)
time.sleep(3)
driver.quit()

#web scraping Part:

res= requests.get(currentURL)
....
...