python selenium webドライバを使用してWebスクラップスクリプトを作成しましたが、問題はデータが大きすぎるためインターネット接続が数秒間中断されたときにスクリプトの実行が再開します私は最初から始める必要があります。 他のいくつかのソリューションを私を助けたり、私を導いてくださいscrapyフレームワークを使用してインターネット接続が中断された場合、Webスクレイピングスクリプトが停止する
ワーキングコード:それは要素を見つけたときに暗黙のうちにタイムアウトを設定していない場合
import time
from bs4 import BeautifulSoup
from selenium import webdriver
import MySQLdb
# Open database connection
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username
passwd="", # your password
db="test") # name of the data base
url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx"
browser = webdriver.Chrome()
browser.get(url)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
states = [ x["value"] for x in soup.find("td", bgcolor="#ffe0c0").find_all("option") ]
for state in states:
cur_state = browser.find_element_by_id("ddldistrict")
cur_state.send_keys(state)
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
districts = [ x["value"] for x in soup.find("td", bgcolor="#ffe0c0").find_next_sibling().find_all("option") ]
districts = districts[1:]
for dist in districts:
district = browser.find_element_by_id("ddldistrict")
district.send_keys(dist)
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
talukas = [ x["value"] for x in soup.find("td", bgcolor="#ffe0c0").find_next_sibling().find_all("option") ]
talukas = talukas[1:]
for taluka in talukas:
category = browser.find_element_by_id("ddltaluka")
category.send_keys(taluka)
button = browser.find_element_by_id("btnSearch")
button.click()
time.sleep(10)
browser.save_screenshot(browser.title + ".JPEG")
html = browser.page_source
soup = BeautifulSoup(html, "html.parser")
table = soup.find(id="dgDisplay")
if table:
#print("found")
cursor=db.cursor()
for row in table.findAll("tr")[1:]:
cells = row.findAll("td")
name = cells[0].find(text=True)
city = cells[1].find(text=True)
licence = cells[2].find(text=True)
owner = cells[3].find(text=True)
print("Name:"+name+"city:"+city+"licence:"+licence+"owner:"+owner)
try:
cursor.execute ("INSERT INTO distributors (name, city, licence, owner) VALUES (%s, %s, %s, %s);", (name, city, licence, owner))
except (MySQLdb.Error, MySQLdb.Warning) as e:
print(e)
db.commit()
#else:
# print("not found")
db.close()
browser.close()
browser.quit()
正確な例外の例として、スタックトレースがあります。これは非常に役に立ちます。 –