首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新闻网站抓取不起作用?

新闻网站抓取不起作用?
EN

Stack Overflow用户
提问于 2017-06-03 09:30:33
回答 1查看 47关注 0票数 1

大家好,我是python新手,很抱歉在我不知道出了什么问题的情况下问了这么具体的问题。

我在试着从韩国的新网站抓取新闻文章。当我运行以下代码时

代码语言:javascript
复制
    import sys
    from bs4 import BeautifulSoup
    import urllib.request
    from urllib.parse import quote

    target_url_b4_pn="http://news.donga.com/search?p="
    target_url_b4_keyword='&query='

target_url_rest="&check_news1&more=1&sorting1&search_date1&v1=&v2=&range=1"



    def get_text(URL, output_file):
        source_code_from_URL=urllib.request.urlopen(URL)
        soup=BeautifulSoup(source_code_from_URL, 'lxml', from_encoding='UTF-8')
        content_of_article=soup.select('div.article')
        for item in content_of_article:
            string_item=str(item.find_all(text=True))
            output_file.write(string_item)

    def get_link_from_news_title(page_num, URL, output_file):
        for i in range(page_num):
            current_page_num=1+i*15
            position=URL.index('=')
                    URL_with_page_num=URL[:position+1]+str(current_page_num)+URL[position+1:]
            source_code_from_URL=urllib.request.urlopen(URL_with_page_num)
            soup=BeautifulSoup(source_code_from_URL, 'lxml',from_encoding='UTF-8')

            for title in soup.find_all('p','tit'):
                title_link=title.select('a')
                article_URL=title_link[0]['href']
                get_text(article_URL, output_file)

    def main():
        keyword="노무현"
        page_num=1
        output_file_name="output.txt"
        target_url=target_url_b4_pn+target_url_b4_keyword+quote(keyword)+target_url_rest
        output_file=open(output_file_name, "w", -1, "utf-8")
        get_link_from_news_title(page_num, target_url, output_file)
        output_file.close()


    if __name__=='__main__':
        main()
    print(target_url)
    print(11111)

jupyter笔记本不响应输入,甚至不会在底部显示任何简单的命令(不打印任何内容)

认为代码以某种方式冻结了它,请告诉我它可能会出错的地方?

the picture where it's not responding

EN

回答 1

Stack Overflow用户

发布于 2017-06-03 10:33:38

  1. 在你的get_text函数的第一行,urllib.request.urlopen(URL)意味着你打开url,但是就像你打开一个文件一样,你必须用read打开它。

因此,在它后面添加一个read()

  • 和你的css选择器soup.select('div.article')中没有这样的元素,我猜你想要的是soup.select('div.article_txt'),它匹配的段落print(target_url)应该移到你的main函数中,因为target_url只定义在article.

  • your中

代码

代码语言:javascript
复制
import sys
from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import quote

target_url_b4_pn="http://news.donga.com/search?p="
target_url_b4_keyword='&query='

target_url_rest="&check_news1&more=1&sorting1&search_date1&v1=&v2=&range=1"



def get_text(URL, output_file):
    source_code_from_URL=urllib.request.urlopen(URL)
    soup=BeautifulSoup(source_code_from_URL, 'lxml', from_encoding='UTF-8')
    # change your css selector so it match some element
    content_of_article=soup.select('div.article_txt')
    for item in content_of_article:
        string_item=item.find_all(text=True)
        #write string to file
        output_file.write(" ".join(string_item))

def get_link_from_news_title(page_num, URL, output_file):
    for i in range(page_num):
        current_page_num=1+i*15
        position=URL.index('=')
        URL_with_page_num=URL[:position+1]+str(current_page_num)+URL[position+1:]
        source_code_from_URL=urllib.request.urlopen(URL_with_page_num)
        soup=BeautifulSoup(source_code_from_URL, 'lxml',from_encoding='UTF-8')

        for title in soup.find_all('p','tit'):
            title_link=title.select('a')
            article_URL=title_link[0]['href']
            get_text(article_URL, output_file)

def main():
    keyword="노무현"
    page_num=1
    output_file_name="output.txt"
    target_url=target_url_b4_pn+target_url_b4_keyword+quote(keyword)+target_url_rest
    # move `target_url` here
    print(target_url)

    output_file=open(output_file_name, "w", -1, "utf-8")
    get_link_from_news_title(page_num, target_url, output_file)
    output_file.close()


if __name__=='__main__':
    main()
    print(11111)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44339400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档