Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 美丽的汤-空白屏幕长时间没有任何输出_Python_Python 2.7_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 美丽的汤-空白屏幕长时间没有任何输出

Python 美丽的汤-空白屏幕长时间没有任何输出,python,python-2.7,web-scraping,beautifulsoup,Python,Python 2.7,Web Scraping,Beautifulsoup,我对python非常陌生,正在从事一个基于抓取的项目——我应该从包含特定搜索词的链接中提取所有内容,并将它们放在csv文件中。作为第一步,我编写了这段代码,根据输入的搜索词从网站中提取所有链接。我只得到一个空白屏幕作为输出,我无法找到我的错误 import urllib import mechanize from bs4 import BeautifulSoup import datetime def searchAP(searchterm): newlinks = [] br

我对python非常陌生,正在从事一个基于抓取的项目——我应该从包含特定搜索词的链接中提取所有内容,并将它们放在csv文件中。作为第一步,我编写了这段代码,根据输入的搜索词从网站中提取所有链接。我只得到一个空白屏幕作为输出,我无法找到我的错误

import urllib
import mechanize
from bs4 import BeautifulSoup
import datetime

def searchAP(searchterm):
    newlinks = []
    browser = mechanize.Browser()
    browser.set_handle_robots(False)
    browser.addheaders = [('User-agent', 'Firefox')]
    text = ""
    start = 0

    while "There were no matches for your search" not in text:
        url = "http://www.marketing-interactive.com/"+"?s="+searchterm
        text = urllib.urlopen(url).read()
        soup = BeautifulSoup(text, "lxml")
        results = soup.findAll('a')
        for r in results:
            if "rel=bookmark" in r['href'] :
                newlinks.append("http://www.marketing-interactive.com"+ str(r["href"]))  
        start +=10
                return newlinks  
       print searchAP("digital marketing")

下面的脚本根据给定的搜索键从网页中提取所有链接。但它不会超出第一页进行探索。尽管可以通过操纵URL中的页码(如Rutger de Knijf在中所述),轻松修改以下代码以从多个页面获得所有结果

用法:

pprint(get_url_for_search_key('digital marketing'))
输出:

[u'http://www.marketing-interactive.com/astro-launches-digital-marketing-arm-blaze-digital/',
 u'http://www.marketing-interactive.com/singapore-polytechnic-on-the-hunt-for-digital-marketing-agency/',
 u'http://www.marketing-interactive.com/how-to-get-your-bosses-on-board-your-digital-marketing-plan/',
 u'http://www.marketing-interactive.com/digital-marketing-institute-launches-brand-refresh/',
 u'http://www.marketing-interactive.com/entropia-highlights-the-7-original-sins-of-digital-marketing/',
 u'http://www.marketing-interactive.com/features/futurist-right-mindset-digital-marketing/',
 u'http://www.marketing-interactive.com/lenovo-brings-board-new-digital-marketing-head/',
 u'http://www.marketing-interactive.com/video/discussing-digital-marketing-indonesia-video/',
 u'http://www.marketing-interactive.com/ubs-melvin-kwek-joins-credit-suisse-as-apac-digital-marketing-lead/',
 u'http://www.marketing-interactive.com/linkedins-top-10-digital-marketing-predictions-2017/']

希望这是您希望作为项目第一步的内容。

您犯了四个错误:

  • 您正在定义
    start
    ,但从未使用过它。(就我在
    http://www.marketing-interactive.com/?s=something
    。没有基于url的分页。)因此您可以无休止地循环第一组结果

  • “您的搜索没有匹配项”
    不是该站点返回的无结果字符串。所以不管怎样,它都会永远持续下去

  • 您正在添加链接,包括
    http://www.marketing-interactive.com
    http://www.marketing-interactive.com
    。因此,您将以
    http://www.marketing-interactive.comhttp://www.marketing-interactive.com/astro推出数字营销部门blaze digital/

  • 关于
    rel=bookmark
    选择:是正确的方法。但如果你真的想这样做,你需要这样做:

    for r in results:
        if r.attrs.get('rel') and r.attrs['rel'][0] == 'bookmark':
            newlinks.append(r["href"])
    
    这首先检查
    rel
    是否存在,然后检查其第一个子项是否为
    “bookmark”
    ,因为
    r['href']
    根本不包含
    rel
    。这不是BeautifulSoup构建事物的方式

  • 要清除此特定站点,您可以做两件事:

  • 您可以使用Selenium或其他支持Javascript的东西,然后按下“加载更多”按钮。但这是一个相当麻烦的问题

  • 你可以利用这个漏洞:
    http://www.marketing-interactive.com/wp-content/themes/MI/library/inc/loop_handler.php?pageNumber=1&postType=search&searchValue=digital+营销
    这是提供列表的url。它具有分页功能,因此您可以轻松循环所有结果


  • 我已经纠正了您所指出的错误,并在结果中使用了您的代码片段-r:if r.attrs.get('rel')和r.attrs['rel'][0]=='bookmark':newlinks.append(r[“href”])并且仍然得到“按任意键继续”作为输出。甚至我的代码中arif的书签解决方案也给出了相同的输出,我使用selenium(正如您所建议的)访问LoadMore按钮。我确实有问题刮新加载的链接。你能看一下吗?[
    for r in results:
        if r.attrs.get('rel') and r.attrs['rel'][0] == 'bookmark':
            newlinks.append(r["href"])