无法刮文字

时间:2016-08-29 06:44:16

标签: python web-services scrape

我试图获得网站的标题。 所以,我用这个片段做了这个

    sys.stdout = open("test_data.txt", "w")
    url2 = "https://www.google.com/"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'}
    req = urllib2.Request(url2, None, headers)
    req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
    html = urllib2.urlopen(req, timeout=60).read()
    soup = BeautifulSoup(html)
    # Extract title
    list1 = soup.title.string
    print list1.encode('utf-8')

这非常有效,并将 Google 作为标题,并将输出刷新到test_data.txt。

但是当我尝试运行与Web服务相同的代码时,它不起作用。我得到一个空的文本文件。 我正在点击此网址,在我的本地http://0.0.0.0:8881/get_title

上运行此网络服务
from bottle import route, run, request

@route('/get_title')
def get_title():
    sys.stdout = open("test_data.txt", "w")
    url2 = "https://www.google.com/"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'}
    req = urllib2.Request(url2, None, headers)
    req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
    html = urllib2.urlopen(req, timeout=60).read()
    soup = BeautifulSoup(html)
    # Extract title
    list1 = soup.title.string
    print list1.encode('utf-8')

if __name__ == "__main__":
    run(host='0.0.0.0', port=8881, debug=True)

让我更加焦虑的另一件事是当我为msn.com运行网络服务时,它适用于两个片段(甚至是网络服务)。

任何帮助都会感激不尽!!

1 个答案:

答案 0 :(得分:-2)

这是烧瓶吗?如果是这样,您需要return要发送给用户的字符串。 print语句写入Web服务器日志。您应该使用以下内容替换get_title函数的最后一行:

return list1.encode('utf-8')