Рекламные объявления портят мою статью

Что мне нужно сделать, когда я пытаюсь сканировать статью, но ее объявления продолжают появляться? В частности, те, которые будут появляться в середине экрана с просьбой войти / зарегистрироваться, и вам придется вручную закрыть его перед чтением.

Из-за этого мой обход не может ничего извлечь. Любой совет о том, как кодировать "закрытое объявление перед сканированием" с помощью pyquery?

Изменить: Теперь работа с Selenium, чтобы попытаться избавиться от всплывающих окон. Любые советы будут высоко ценится.

import mechanize
import time
import urllib2
import pdb
import lxml.html
import re
from pyquery import PyQuery as pq

def open_url(url):    
    print 'open url:',url 

try:    
    br = mechanize.Browser()
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.addheaders = [('user-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3')]
    response = br.open(url)
    html = response.get_data()
    return html
except:
    print u"!!!! url can not be open by mechanize either!!! \n"

def extract_text_pyquery(html):
    p = pq(html)
    article_whole = p.find(".entry-content")
    p_tag = article_whole('p')
    print len(p_tag)
    print p_tag
    for i in range (0, len(p_tag)):
        text = p_tag.eq(i).text()
        print text
    entire = p.find(".grid_12")
    author = entire.find('p')
    print len(author)
    print "By:", author.text()

    images = p.find('#main_photo')
    link = images('img')
    print len(link)
    for i in range(len(link)):
    url = pq(link[i])

    result =url.attr('src').find('smedia')
    if result>0:
        print url.attr('src')



if __name__ =='__main__':
    #print '----------------------------------------------------------------'

url_list = ['http://www.newsobserver.com/2014/10/17/4240490/obama-weighs-ebola-czar-texas.html?sp=/99/100/&ihp=1',


            ]
html= open_url(url_list[0])
# dissect_article(html)
extract_text_pyquery(html)

1 ответ

Если вы планируете постоянно сканировать этот конкретный сайт, вы можете проверить наличие элементов с id="continue_link и вытащить ключ от этого. Затем загрузите эту страницу и очистите.

Например, URL в вашем url_list он содержал этот элемент

<a href="http://www.bnd.com/2014/10/10/3447693_rude-high-school-football-players.html?rh=1" id="continue_link" class="wp_bold_link wp_color_link wp_goto_link">Skip this ad</a>

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

p = pq(html)
if p.find("#continue_link):
    continue_link = p.find("#continue_link")
    html = open_url(continue_link('href'))
    extract_text_pyquery(html)
    return
<rest of code if there is no continue link>
Другие вопросы по тегам