BeautifulSoup и Python: итерация по таблице не работает ⇐ Python
-
Гость
BeautifulSoup и Python: итерация по таблице не работает
Я работал над переписыванием старого кода, который написал много лет назад, но теперь столкнулся с проблемами:
Я пытаюсь извлечь информацию из таблицы на этом сайте: https://www.tdcj.texas.gov/death_row/dr ... nders.html и поместить ее в базу данных. Проблема, с которой я столкнулся, заключается в том, что когда я запускаю ее, она продолжает проходить одну и ту же строку. Я пробовал различные решения, но не могу разобраться в этой проблеме. Когда я запускаю код, я получаю:
https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html Очевидно, что во время получения информации оно должно уменьшаться, но оно продолжает читать одну и ту же информацию снова и снова. Это мой код:
import sqlite3 #предупреждение: используйте кодировку 65001, введя cmd «chcp 65001». Только при отображении последних операторов на экране. импортировать повторно из bs4 импорт BeautifulSoup запросы на импорт строка импорта импортировать URL-библиотеку импортировать URLlib3 Заголовки = [] conn = sqlite3.connect('Deathrow.sqlite') запросы.urllib3.disable_warnings() conn.text_factory = ул Cur = conn.cursor() cur.execute("УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЮТ заключенные") cur.execute("CREATE TABLE Intimates (целочисленный идентификатор первичного ключа, текст казни, текст фамилии, текст имени, текст TDCJNumber, целое число возраста, текст даты, текст расы, текст округа, текст последнего заявления)")" конн.коммит() url='https://www.tdcj.texas.gov/death_row/dr ... nders.html' данные = запросы.get(url,verify = False).текст суп = BeautifulSoup(data,"html.parser") table = Soup.find('table', attrs={'class': "tdcj_table indent"}) заголовки = table.find_all("th") для заголовка в заголовках: Заголовок = заголовок.текст Titles.append(Название) строки = table.find_all('tr') UrlLastStatement = "https://www.tdcj.texas.gov/death_row/" данные = table.find_all('td') #foreach row в строках [1:]: для строки в строках: #пытаться: ExecutionID = str(data[0].get_text()) Фамилия = str(data[3].get_text()) Имя = str(data[4].get_text()) TDJC = ул(данные[5].get_text()) Возраст = ул(данные[6].get_text()) Дата = ул(данные[7].get_text()) Раса = ул(данные[8].get_text()) Округ = ул(данные[9].get_text()) print ("--- получение данных выполнения для идентификатора выполнения",ExecutionID,Lastname,",",Firstname," ---") LastStatementLinks = table.find_all("a", href=True) LastStatementLink = LastStatementLinks[1].get("href") Urlcomplete = UrlLastStatement + LastStatementLink распечатать (URLcomplete) r = Requests.get(Urlcomplete,verify = False) #print(р) print ("--- получение оператора", ExecutionID, " ---") документ = urllib.request.urlopen(Urlcomplete) html = документ.чтение() суп = BeautifulSoup(html,"html.parser") шаблон = re.compile("Последний оператор:") оператор = суп.find(строка=шаблон).findNext('p').contents[0] оператор = str(оператор) заявление = заявление.lstrip(' ') заявление = заявление.rstrip(' ') оператор = оператор.replace("
Я работал над переписыванием старого кода, который написал много лет назад, но теперь столкнулся с проблемами:
Я пытаюсь извлечь информацию из таблицы на этом сайте: https://www.tdcj.texas.gov/death_row/dr ... nders.html и поместить ее в базу данных. Проблема, с которой я столкнулся, заключается в том, что когда я запускаю ее, она продолжает проходить одну и ту же строку. Я пробовал различные решения, но не могу разобраться в этой проблеме. Когда я запускаю код, я получаю:
https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html --- получение оператора 584 --- --- получение данных выполнения для идентификатора выполнения 584 Мерфи, Джеддидия --- https://www.tdcj.texas.gov/death_row/dr ... hlast.html Очевидно, что во время получения информации оно должно уменьшаться, но оно продолжает читать одну и ту же информацию снова и снова. Это мой код:
import sqlite3 #предупреждение: используйте кодировку 65001, введя cmd «chcp 65001». Только при отображении последних операторов на экране. импортировать повторно из bs4 импорт BeautifulSoup запросы на импорт строка импорта импортировать URL-библиотеку импортировать URLlib3 Заголовки = [] conn = sqlite3.connect('Deathrow.sqlite') запросы.urllib3.disable_warnings() conn.text_factory = ул Cur = conn.cursor() cur.execute("УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЮТ заключенные") cur.execute("CREATE TABLE Intimates (целочисленный идентификатор первичного ключа, текст казни, текст фамилии, текст имени, текст TDCJNumber, целое число возраста, текст даты, текст расы, текст округа, текст последнего заявления)")" конн.коммит() url='https://www.tdcj.texas.gov/death_row/dr ... nders.html' данные = запросы.get(url,verify = False).текст суп = BeautifulSoup(data,"html.parser") table = Soup.find('table', attrs={'class': "tdcj_table indent"}) заголовки = table.find_all("th") для заголовка в заголовках: Заголовок = заголовок.текст Titles.append(Название) строки = table.find_all('tr') UrlLastStatement = "https://www.tdcj.texas.gov/death_row/" данные = table.find_all('td') #foreach row в строках [1:]: для строки в строках: #пытаться: ExecutionID = str(data[0].get_text()) Фамилия = str(data[3].get_text()) Имя = str(data[4].get_text()) TDJC = ул(данные[5].get_text()) Возраст = ул(данные[6].get_text()) Дата = ул(данные[7].get_text()) Раса = ул(данные[8].get_text()) Округ = ул(данные[9].get_text()) print ("--- получение данных выполнения для идентификатора выполнения",ExecutionID,Lastname,",",Firstname," ---") LastStatementLinks = table.find_all("a", href=True) LastStatementLink = LastStatementLinks[1].get("href") Urlcomplete = UrlLastStatement + LastStatementLink распечатать (URLcomplete) r = Requests.get(Urlcomplete,verify = False) #print(р) print ("--- получение оператора", ExecutionID, " ---") документ = urllib.request.urlopen(Urlcomplete) html = документ.чтение() суп = BeautifulSoup(html,"html.parser") шаблон = re.compile("Последний оператор:") оператор = суп.find(строка=шаблон).findNext('p').contents[0] оператор = str(оператор) заявление = заявление.lstrip(' ') заявление = заявление.rstrip(' ') оператор = оператор.replace("