#python #python-2.7 #csv #web-scraping #beautifulsoup
#python #python-2.7 #csv #очистка веб-страниц #beautifulsoup
Вопрос:
Я пытаюсь сохранить все данные (т.Е. Все страницы) в одном CSV-файле, но этот код сохраняет только конечные данные страницы.Например, здесь url [] содержит 2 URL-адреса. окончательный csv содержит только данные 2-го URL. Я явно делаю что-то не так в цикле. но я не знаю, что. А также эта страница содержит 100 точек данных. Но этот код записывает только первые 44 строки. пожалуйста, помогите с этой проблемой………….
from bs4 import BeautifulSoup
import requests
import csv
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"]
for ur in url:
r = requests.get(ur)
soup = BeautifulSoup(r.content)
g_data = soup.find_all("a", {"class": "hdrlnk"})
gen_list=[]
for row in g_data:
try:
name = row.text
except:
name=''
try:
link = "http://sfbay.craigslist.org" row.get("href")
except:
link=''
gen=[name,link]
gen_list.append(gen)
with open ('filename2.csv','wb') as file:
writer=csv.writer(file)
for row in gen_list:
writer.writerow(row)
Ответ №1:
gen_list снова инициализируется внутри вашего цикла, который выполняется по URL-адресам.
gen_list=[]
Переместите эту строку за пределы цикла for.
...
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"]
gen_list=[]
for ur in url:
...
Ответ №2:
я нашел ваш пост позже, хочу попробовать этот метод:
import requests
from bs4 import BeautifulSoup
import csv
final_data = []
url = "https://sfbay.craigslist.org/search/sss"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "html.parser")
get_details = soup.find_all(class_="result-row")
for details in get_details:
getclass = details.find_all(class_="hdrlnk")
for link in getclass:
link1 = link.get("href")
sublist = []
sublist.append(link1)
final_data.append(sublist)
print(final_data)
filename = "sfbay.csv"
with open("./" filename, "w") as csvfile:
csvfile = csv.writer(csvfile, delimiter = ",")
csvfile.writerow("")
for i in range(0, len(final_data)):
csvfile.writerow(final_data[i])