Чтение и обработка данных из URL-адреса в python

Я пытаюсь получить данные из URL. Ниже указан формат URL.

Что я пытаюсь сделать
1) прочитайте строку за строкой и найдите, содержит ли строка нужное ключевое слово. 3) Если да, то сохраните содержимое предыдущей строки «GETCONTENT» в списке.

<http://www.example.com/XYZ/a-b-c/w#>DONTGETCONTENT    
 a       <http://www.example.com/XYZ/mount/v1#NNNN> , 
<http://www.w3.org/2002/w#Individual> ;
        <http://www.w3.org/2000/01/rdf-schema#label>
                "some content , "some url content ;
        <http://www.example.com/XYZ/log/v1#hasRelation>
                <http://www.example.com/XYZ/data/v1#Change> ;
        <http://www.example.com/XYZ/log/v1#ServicePage>
                <https://dev.org.net/apis/someLabel> ;
        <http://www.example.com/XYZ/log/v1#Description>
                "Some API Content .

<http://www.example.com/XYZ/model/v1#GETBBBBBB>
a       <http://www.w3.org/01/07/w#BBBBBB> ;
        <http://www.w3.org/2000/01/schema#domain>
                <http://www.example.com/XYZ/data/v1#xyz> ;
        <http://www.w3.org/2000/01/schema#label1>
               "some content , "some url content ;
        <http://www.w3.org/2000/01/schema#range>
                <http://www.w3.org/2001/XMLSchema#boolean> ;
       <http://www.example.com/XYZ/log/v1#Description>
            "Some description .

<http://www.example.com/XYZ/datamodel-ee/v1#GETAAAAAA>
 a       <http://www.w3.org/01/07/w#AAAAAA> ;
        <http://www.w3.org/2000/01/schema#domain>
                <http://www.example.com/XYZ/data/v1#Version> ;
        <http://www.w3.org/2000/01/schema#label>
                "some content ;
        <http://www.w3.org/2000/01/schema#range>
            <http://www.example.com/XYZ/data/v1#uuu> .

<http://www.example.com/XYZ/datamodel/v1#GETCCCCCC>
 a       <http://www.w3.org/01/07/w#CCCCCC , 
<http://www.w3.org/2002/07/w#Name> 
        <http://www.w3.org/2000/01/schema#domain>
                <http://www.example.com/XYZ/data/v1#xyz> ;
        <http://www.w3.org/2000/01/schema#label1>
              "some content , "some url content ;
        <http://www.w3.org/2000/01/schema#range>
               <http://www.w3.org/2001/XMLSchema#boolean> ;
        <http://www.example.com/XYZ/log/v1#Description>
               "Some description .

ниже приведен код, который я пробовал до сих пор, но он печатает все содержимое файла

  import re
        def read_from_url():
            try:
                from urllib.request import urlopen
            except ImportError:
                from urllib2 import urlopen
            url_link = "examle.com"
            html = urlopen(url_link)
            previous=None
            for line in html:
                previous=line
                line = re.search(r"^(\s*a\s*)|\#GETBBBBBB|#GETAAAAAA|#GETCCCCCC\b", 
        line.decode('UTF-8'))
                print(previous)
        if __name__ == '__main__':
        read_from_url()

Ожидаемый результат:

GETBBBBBB , GETAAAAAA , GETCCCCCC 

Заранее спасибо!!

Можете ли вы включить то, что вы ожидаете от своего кода, из данных примера?

glibdud 22.05.2019 16:02

Ожидаемый результат состоит в том, чтобы распечатать или сохранить GETCONTENT 3 раза в списке, если он найдет ACACAC, BCBCBC или ABABAB в строке, начинающейся с «a», то есть во второй строке.

RJ_Singh 23.05.2019 07:43

Пожалуйста, добавьте его в сам вопрос и покажите точно, что вы ожидаете. Не просто описывайте это.

glibdud 23.05.2019 12:35
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
3
774
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Когда дело доходит до чтения данных из URL-адресов, библиотека requests намного проще:

import requests

url = "https://www.example.com/your/target.html"
text = requests.get(url).text

Если вы не установили его, вы можете использовать для этого следующее:

pip3 install requests

Далее, зачем запихивать все ваши слова в одно регулярное выражение, если вы можете использовать массив слов, а затем вместо этого использовать цикл for?

Например:

search_words = "hello word world".split(" ")
matching_lines = []

for (i, line) in enumerate(text.split()):
  line = line.strip()
  if len(line) < 1:
    continue
  for word i search_words:
    if re.search("\b" + word + "\b", line):
      matching_lines.append(line)
      continue

Затем вы должны вывести результат, например:

print(matching_lines)

Выполнение этого, где переменная text равна:

"""
this word will save the line
ignore me!
hello my friend!
what about me?
"""

Должен выводиться:

[
  "this word will save the line",
  "hello my friend!"
]

Вы можете сделать поиск нечувствительным к регистру, используя метод lower, например:

search_words = [word.lower() for word in "hello word world".split(" ")]
matching_lines = []

for (i, line) in enumerate(text.split()):
  line = line.strip()
  if len(line) < 1:
    continue
  line = line.lower()
  for word i search_words:
    if re.search("\b" + word + "\b", line):
      matching_lines.append(line)
      continue

Примечания и информация:

  1. ключевое слово continue не позволяет вам искать более одного совпадения слов в текущей строке
  2. функция enumerate позволяет нам перебирать index и текущую строку
  3. Я не помещал функцию lower для слов внутри цикла for, чтобы вам не приходилось вызывать lower для каждого совпадения слова и каждой строки.
  4. Я не вызывал lower на линии до после проверки, потому что нет смысла в нижнем регистре пустой строки

Удачи.

Я озадачен несколькими вещами, ответы на которые могут помочь сообществу лучше помочь вам. В частности, я не могу сказать, в какой форме находится файл (т. е. это файл txt или URL-адрес, на который вы делаете запрос и анализируете ответ). Я также не могу сказать, пытаетесь ли вы получить всю строку, только URL-адрес или только бит, следующий за символом решетки.

Тем не менее, вы заявили, что искали программу для вывода GETBBBBBB , GETAAAAAA , GETCCCCCC, и вот быстрый способ получить эти конкретные значения (при условии, что значения представлены в виде строки):

search = re.findall(r'#(GET[ABC]{6})>', string)

В противном случае, если вы читаете текстовый файл, это может помочь:

with open('example_file.txt', 'r') as file:
    lst = []
    for line in file:
        search = re.findall(r'#(GET[ABC]{6})', line)
        if search != []: 
            lst += search
    print(lst)

Конечно, это всего лишь несколько быстрых советов на случай, если они могут оказаться полезными. В противном случае, пожалуйста, ответьте на вопросы, которые я упомянул в начале своего ответа, и, возможно, это поможет кому-то на SO лучше понять, что вы хотите получить.

Другие вопросы по теме