#python #url
#python #url
Вопрос:
Я пытаюсь прочитать URL-адреса из первого столбца в файле csv. В csv-файле всего 6051 URL-адрес, который я хочу прочитать. Для этого я попробовал следующие коды:
urls = []
with open("C:/Users/hyoungm/Downloads/urls.csv") as csvfile:
blogurl = csv.reader(csvfile)
for row in blogurl:
row = row[0]
print(row)
len (строка)
Однако количество отображаемых URL-адресов составляет всего 65. Я понятия не имею, почему общее количество URL-адресов отображается иначе, чем в файле csv.
Кто-нибудь может мне помочь с выяснением того, как прочитать все URL-адреса (всего 6051) из файла csv?
Чтобы прочитать все URL-адреса из файла csv, я также попробовал несколько разных кодов, которые привели к одинаковому количеству URL-адресов (т. е. 65 URL-адресов) или сбою, например: 1)
openfile = open("C:/Users/hyoungm/Downloads/urls.csv")
r = csv.reader(openfile)
for i in r:
#the urls are in the first column ... 0 refers to the first column
blogurls = i[0]
print (blogurls)
len(blogurls)
2)
urls = pd.read_csv("C:/Users/hyoungm/Downloads/urls.csv")
with closing(requests.get(urls, stream = True)) as r:
reader = csv.reader(r.iter_lines(), delimiter = ',', quotechar = '""')
for row in reader:
print(row)
len(row)
3)
with open("C:/Users/hyoungm/Downloads/urls.csv") as csvfile:
lines = csv.reader(csvfile)
for i, line in enumerate(lines):
if i == 0:
for line in csvfile:
print(line[1:])
len(line)
4) и
blogurls = []
with open("C:/Users/hyoungm/Downloads/urls.csv") as csvfile:
r = csv.reader(csvfile)
for i in r:
blogurl = i[0]
r = requests.get(blogurl)
blogurls.append(blogurl)
for url in blogurls:
page = urlopen(url[0]).read()
soup = BeautifulSoup(page, "html.parser")
len(blogurls)
Я ожидаю, что на выходе будет 6051 URL-адрес, первоначально собранный в файле csv, вместо 65 URL-адресов.
После прочтения всех URL-адресов я собираюсь записать текстовые данные с каждого URL-адреса. Я предполагал получить следующие текстовые данные, используя все 6051 URL-адреса. Пожалуйста, нажмите на следующую ссылку для изображения:
коды и результаты основаны на 65 URL-адресах на данный момент
Комментарии:
1. Возможно ли, что вы размещаете здесь часть файла CSV? Может возникнуть проблема с форматированием (неожиданные символы новой строки или разделители). Поскольку ваш CSV не очень большой, вы могли бы прочитать его полностью
with open(...) as csvfile: content = file.read()
. Затем вы могли бы провести некоторый анализ, чтобы проверить, правильно ли прочитан файл, например, посмотреть,len(content.splitlines()) == 6051
.2. @EliasStrehle Спасибо за ваше предложение. Я попробовал ваш код, и он показывает общее количество 6051. Однако ссылок по-прежнему всего 65. Кроме того, используя предложенные вами коды, я не могу извлечь текстовые данные, которые мне удалось (пожалуйста, смотрите прикрепленное изображение в моем вопросе). Вы не возражаете, если я отправлю файл csv на вашу электронную почту или по другим каналам? Я не смог найти, как прикрепить файл здесь. Еще раз спасибо!
3. Попробуйте отделить получение списка URL-адресов от фактического обхода их. Это упрощает отладку. Что вы видите, когда запускаете цикл с
print(row)
? Он печатает только 65 URL-адресов или 6051 URL-адрес?4. Когда я запускаю print (строка), он показывает 65 URL-адресов, хотя на самом деле в первом столбце 6051 URL-адрес. Я не уверен, почему коды не могут прочитать все 6051 URL-адрес. Мне нужны все URL-адреса, чтобы записать из них текстовые данные (показано на изображении выше). Не могли бы вы повторить попытку с моим файлом csv?
5. Можете ли вы загрузить куда-нибудь общедоступное? Например, на GitHub?
Ответ №1:
Для меня работают следующие два подхода:
import requests
r = requests.get('https://raw.githubusercontent.com/GemmyMoon/MultipleUrls/master/urls.csv')
urls = r.text.splitlines()
print(len(urls)) # Returns 6051
и
import csv
import requests
from io import StringIO
r = requests.get('https://raw.githubusercontent.com/GemmyMoon/MultipleUrls/master/urls.csv')
reader = csv.reader(StringIO(r.text))
urls = [line[0] for line in reader]
print(len(urls)) # Returns 6051
Комментарии:
1. Вау, я попробую это. Спасибо за вашу проверку!