python
  • python-2.7
  • web-scraping
  • urllib
  • 2017-02-17 23 views 0 likes 
    0

    Используйте эту ссылку в raw_input: http://edition.cnn.com/Как я могу заставить urllib использовать найденную ссылку?

    import urllib 
    import re 
    
    
    CNN_Technology = (raw_input('Paste your link here: ')) 
    
    urls = ["http://edition.cnn.com/"] 
    pattern = 'Entertainment</a><a class="nav-menu-links__link" href="//(.+?)data-analytics-header="main-menu_tech' 
    result = re.compile(pattern) 
    
    for url in urls: 
        htmlsource = urllib.urlopen(url) 
        htmltext = htmlsource.read() 
        cnntech = re.findall(result, htmltext) 
        print "" 
        print "CNN Link:" 
        print cnntech 
        print "" 
    

    Я хочу, чтобы вновь найти ссылку money.cnn.com/technology/, чтобы быть там, где cnntech есть и сканировать его впоследствии.

    urls = ["cnntech"] 
    pattern = 'Entertainment</a><a class="nav-menu-links__link" href="//(.+?)data-analytics-header="main-menu_tech' 
    result = re.compile(pattern) 
    
    for url in urls: 
        htmlsource = urllib.urlopen(url) 
        htmltext = htmlsource.read() 
        cnntech2 = re.findall(result, htmltext) 
        print "CNN Link:" 
        print cnntech2 
    <code> 
    
    +0

    Попытка извлечь фрагменты HTML с регулярным выражением ... Как это сказать? [Спорная тема] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). Но попытка извлечь точную ссылку с самим регулярным выражением, состоящим из HTML-тегов, является абсолютным безумием. Вы * определенно * должны научиться использовать библиотеку синтаксического анализа html, например [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/#). –

    ответ

    0

    Ну, давайте представим на мгновение, что регулярные выражения - отличный способ отличить HTML. Итак, мы в мире фантастики.

    Выход первого сценария выглядит следующим образом: ['money.cnn.com/technology/" ']

    Это список, содержащий плохую связь: протокол http:// не определен и есть кавычка в конце. Урлиб ничего не может с этим поделать.

    Первое, что нужно сделать, это исправить регулярное выражение для того, чтобы получить наиболее правильный URL возможный:

    pattern = 'Entertainment</a><a class="nav-menu-links__link" href="//(.+?)" data-analytics-header="main-menu_tech' 
    

    Теперь добавьте префикс «HTTP: //» для всех URL-адресов в вашем списке cnntech :

    urls = [] 
    for links in cnntech: 
        urls.append("http://" + links) 
    

    Наконец, вы можете попробовать вторую часть сценария:

    pattern = YOURSECONDREGEGEX #I do not understand what you want to extract 
    result = re.compile(pattern) 
    
    for url in urls: 
        html = urllib.urlopen(url).read() 
        cnntech2 = re.findall(result, str(html)) 
        print "CNN Link:", cnntech2, "\ n" 
    

    Нет w, вернемся к реальному миру с тем же примером, но на этот раз с использованием анализатора HTML , например Pyquery.

    import requests #better than urllib 
    from pyquery import PyQuery as pq 
    
    urls = ["http://edition.cnn.com/"] 
    
    for url in urls: 
        response = requests.get(url) 
        doc = pq(response.content) 
        cnntech = doc('.m-footer__subtitles--money .m-footer__list-item:nth-child(3) .m-footer__link').attr('href') 
        print("CNN Link: ", cnntech) 
    

    Выход:

    CNN Link: http://money.cnn.com/technology/ 
    

    Странная строка '.m-footer__subtitles--money .m-footer__list-item:nth-child(3) .m-footer__link' является селектором CSS. На первый взгляд кажется еще более устрашающим, чем регулярное выражение, и все же это намного проще. Вы можете легко найти его с помощью таких инструментов, как Google Chrome Selector gadget.

    +0

    Спасибо за помощь. Я посмотрю на beautifulsoup после того, как я попробовал ответить. – Pythor

    +0

    @Pythor Добро пожаловать. Я обновил ответ на примере скрипта с помощью Pyquery, очень похожего на его принципы для BeautifulSoup. –

    +1

    Спасибо, я ценю вашу помощь. Я сразу же буду работать над beautifulsoup – Pythor

     Смежные вопросы

    • Нет связанных вопросов^_^