python - 广告扰乱了我的文章爬行

标签 python web-crawler mechanize pyquery

尝试抓取文章时,我需要做什么,但总是出现各种广告?具体来说,会在屏幕中间弹出的那些,要求登录/注册,你必须在阅读前手动关闭它。

因此,我的抓取无法提取任何内容。关于如何使用 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)

最佳答案

如果您打算继续爬取该特定站点,那么您可以使用 id="continue_link 检查元素。并从中拉出href。然后加载该页面并抓取。

例如您的 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>

关于python - 广告扰乱了我的文章爬行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309642/

相关文章:

python - 使用 Pandas 进行基本矩阵计算

python - 减速板错误 : urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

redirect - Scrapy CrawlSpider parse_item 用于 302 重定向响应

java - 如何在Java中输入字符串作为URL?

python - 如何填写 html 表单并从网站上抓取?

python - 如何修复没有初始值错误的空序列的 reduce()?

python - 如何获取进程监听的端口?

类似于 HtmlUnit 的 C# 库

Perl:查找网页中所有表单字段的值

css - 如何在具有 Mechanize 的下一个 sibling 中仅选择一种类型的第一个节点? ( ruby )