2016-04-22 2 views
1

Я могу очистить страницу до заголовков, никаких проблем. URL-адреса - это еще одна история. Они представляют собой фрагменты, которые получают приложенные на конце базового URL - Я понимаю, что ... Что мне нужно, чтобы тянуть связанные URL-адрес для хранения в формате - base_url.scraped_fragmentСкремблирование страницы для URL-адресов с помощью Beautifulsoup

from urllib2 import urlopen 
import requests 
from bs4 import BeautifulSoup 
import csv 
import MySQLdb 
import re 


html = urlopen("http://advances.sciencemag.org/") 
soup = BeautifulSoup(html.read().decode('utf-8'),"lxml") 
#links = soup.findAll("a","href") 
headlines = soup.findAll("div", "highwire-cite-title media__headline__title") 
    for headline in headlines: 
    text = (headline.get_text()) 
    print text 

ответ

0

Прежде всего, должен быть пробел между именами классов:

highwire-cite-title media__headline__title 
       HERE^ 

Во всяком случае, так как вам нужны ссылки, вы должны быть в поиске a элементы и использовать urljoin(), чтобы абсолютные адреса:

from urlparse import urljoin 

import requests 
from bs4 import BeautifulSoup 


base_url = "http://advances.sciencemag.org" 
response = requests.get(base_url) 
soup = BeautifulSoup(response.content, "lxml") 

headlines = soup.find_all(class_="highwire-cite-linked-title") 
for headline in headlines: 
    print(urljoin(base_url, headline["href"])) 

Печать:

http://advances.sciencemag.org/content/2/4/e1600069 
http://advances.sciencemag.org/content/2/4/e1501914 
http://advances.sciencemag.org/content/2/4/e1501737 
... 
http://advances.sciencemag.org/content/2/2 
http://advances.sciencemag.org/content/2/1 
+0

работает отлично! для отслеживания, если бы я хотел, чтобы URL-адрес был соединен с заголовком, например: Ван-дер-Ваальс: соединение металл-полупроводник: слабое закрепление уровня Ферми обеспечивает эффективную настройку барьера Шоттки, http://advances.sciencemag.org/content/2/4/e1600069 как это выглядело бы? –

+0

@citramaillo, который вы можете получить из 'headline.get_text()', проверьте его. Благодарю. – alecxe

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