Ну, проблема в том, что вы перебираете tables
без добавления. и тогда вы printing
out.
Пример :
for item in range(1, 4):
pass
print(item)
Теперь вывод:
3
Потому что это последний возвращаемый элемент из loop
.
Но, если мы добавим, как показано ниже:
result = []
for item in range(1, 4):
result.append(item)
print(result)
Итак, мы получим следующее:
[1, 2, 3]
Теперь, давайте перейдем к следующему пункту, вы уже можете прочитать table
напрямую, используя pandas .read_ html, поскольку urllib3
уже находится в фоновом режиме pandas
, как показано ниже:
import pandas as pd
df = pd.read_html(
"http://a810-bisweb.nyc.gov/bisweb/BScanItemsRequiredServlet?requestid=7&defaultdisplay=y&passjobnumber=123821098&passdocnumber=01&allbin=1015650")[3]
print(df)
Но поскольку уровень веб-сайта TCP
настроен на Connection: close
ref .
HTTP / 1.1 определяет параметр соединения "close" для отправитель сигнализирует, что соединение будет закрыто после завершения ответа. Например,
Connection: close
Итак, мы запустим эту библиотеку в requests
с сохранением объекта Session
, чтобы он не блокировался брандмауэром server
с помощью requests.Session()
и добавлением table
для каждого url
и затем объединить его в одну table
с использованием функции pd.concat
, а затем преобразовать в csv
using pd.to_csv()
:
import pandas as pd
import requests
urls = ['http://a810-bisweb.nyc.gov/bisweb/BScanItemsRequiredServlet?requestid=7&defaultdisplay=y&passjobnumber=123821098&passdocnumber=01&allbin=1015650',
'http://a810-bisweb.nyc.gov/bisweb/BScanItemsRequiredServlet?requestid=6&defaultdisplay=y&passjobnumber=121054170&passdocnumber=01&allbin=1015650']
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
def main(urls):
goal = []
with requests.Session() as req:
for url in urls:
r = req.get(url, headers=headers)
df = pd.read_html(r.content)[3]
goal.append(df)
goal = pd.concat(goal)
goal.to_csv("data.csv", index=False)
main(urls)
Вывод: Просмотр в сети
Код обновлен согласно Пользователь Запрос:
import pandas as pd
import requests
urls = ['http://a810-bisweb.nyc.gov/bisweb/BScanItemsRequiredServlet?requestid=7&defaultdisplay=y&passjobnumber=123821098&passdocnumber=01&allbin=1015650',
'http://a810-bisweb.nyc.gov/bisweb/BScanItemsRequiredServlet?requestid=6&defaultdisplay=y&passjobnumber=121054170&passdocnumber=01&allbin=1015650']
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
def main(urls):
goal = []
with requests.Session() as req:
for url in urls:
r = req.get(url, headers=headers)
df = pd.read_html(r.content)[2:4]
for table in df:
goal.append(table)
goal = pd.concat(goal)
goal.to_csv("data.csv", index=False)
main(urls)
Вывод: просмотр -онлайн