Web Crawler Чтобы получить ссылки с нового сайта

Я пытаюсь получить ссылки на странице новостей (из одного из своих архивов). Я написал следующие строки кода в Python:

main.py содержит:

  • Очистка Google Finance (BeautifulSoup)
  • Извлечение href с помощью Beautiful Soup
  • Python + BeautifulSoup: как получить оболочку из HTML на основе текста?
  • как получить текст из тега, но игнорировать другие дочерние теги
  • Извлечение текста из тега скрипта с помощью BeautifulSoup в Python
  • Загрузка изображения через urllib и python
  •  import mechanize from bs4 import BeautifulSoup url = "http://www.thehindu.com/archive/web/2010/06/19/" br = mechanize.Browser() htmltext = br.open(url).read() articletext = "" soup = BeautifulSoup(htmltext) for tag in soup.findAll('li', attrs={"data-section":"Business"}): articletext += tag.contents[0] print articletext 

    Пример объекта в tag.contents [0]: <a href="http://www.thehindu.com/business/itc-to-issue-11-bonus/article472545.ece" target="_blank">ITC to issue 1:1 bonus</a>

    Но при запуске я получаю следующую ошибку:

     File "C:\Python27\crawler\main.py", line 4, in <module> text = articletext.getArticle(url) File "C:\Python27\crawler\articletext.py", line 23, in getArticle return getArticleText(htmltext) File "C:\Python27\crawler\articletext.py", line 18, in getArticleText articletext += tag.contents[0] TypeError: cannot concatenate 'str' and 'Tag' objects 

    Может кто-нибудь помочь мне разобраться? Я новичок в программировании на Python. спасибо и привет.

  • Python: удалить exif информацию с изображений
  • Пропустить строки во время импорта psas csv
  • Как найти коды Unicode, для которых шрифт имеет глифы, в системе на базе Debian?
  • выйти из mainloop в python
  • Django MySQL - отдельный запрос для получения нескольких значений
  • Как получить время последнего изменения файла в Python?
  • 3 Solutions collect form web for “Web Crawler Чтобы получить ссылки с нового сайта”

    вы используете link_dictionary смутно. Если вы не используете его для чтения, попробуйте следующий код:

      br = mechanize.Browser() htmltext = br.open(url).read() articletext = "" for tag_li in soup.findAll('li', attrs={"data-section":"Op-Ed"}): for link in tag_li.findAll('a'): urlnew = urlnew = link.get('href') brnew = mechanize.Browser() htmltextnew = brnew.open(urlnew).read() articletext = "" soupnew = BeautifulSoup(htmltextnew) for tag in soupnew.findAll('p'): articletext += tag.text print re.sub('\s+', ' ', articletext, flags=re.M) 

    Примечание: re для выражения regulare. для этого вы импортируете модуль re .

    Я считаю, что вы можете попробовать получить доступ к тексту внутри элемента списка, например:

     for tag in soup.findAll('li', attrs={"data-section":"Business"}): articletext += tag.string 

    Отредактировано: Общее Комментарии о получении ссылок на страницу

    Вероятно, самым простым типом данных, который будет использоваться для сбора связки ссылок и получения их позже, является словарь.

    Чтобы получить ссылки со страницы с помощью BeautifulSoup, вы можете сделать что-то вроде следующего:

     link_dictionary = {} with urlopen(url_source) as f: soup = BeautifulSoup(f) for link in soup.findAll('a'): link_dictionary[link.string] = link.get('href') 

    Это предоставит вам словарь с именем link_dictionary , где каждый ключ словаря представляет собой строку, которая представляет собой просто текстовое содержимое между тегами <a> </a> и каждое значение является значением атрибута href .


    Как объединить это, что было в вашей предыдущей попытке

    Теперь, если мы объединим это с проблемой, с которой вы столкнулись раньше, мы можем попробовать что-то вроде следующего:

     link_dictionary = {} for tag in soup.findAll('li', attrs={"data-section":"Business"}): for link in tag.findAll('a'): link_dictionary[link.string] = link.get('href') 

    Если это не имеет смысла или у вас есть еще много вопросов, вам нужно сначала поэкспериментировать и попытаться найти решение, прежде чем задавать еще один новый, более четкий вопрос.

    Возможно, вы захотите использовать мощный язык запросов XPath с более lxml модулем lxml . Так просто:

     import urllib2 from lxml import etree url = 'http://www.thehindu.com/archive/web/2010/06/19/' html = etree.HTML(urllib2.urlopen(url).read()) for link in html.xpath("//li[@data-section='Business']/a"): print '{} ({})'.format(link.text, link.attrib['href']) 

    Обновление для @ data-section = 'Chennai'

     #!/usr/bin/python import urllib2 from lxml import etree url = 'http://www.thehindu.com/template/1-0-1/widget/archive/archiveWebDayRest.jsp?d=2010-06-19' html = etree.HTML(urllib2.urlopen(url).read()) for link in html.xpath("//li[@data-section='Chennai']/a"): print '{} => {}'.format(link.text, link.attrib['href']) 
    Python - лучший язык программирования в мире.