获取一篇新浪文章信息的简单爬虫

具体代码如下,有详细的注释:

# 本爬虫仅用于学习,纯属爱好,虽然本爬虫很简单,但还是请大家不要滥用
# python3
# 主要采用的 requests库,BeautifulSoup库
import requests
from bs4 import BeautifulSoup

#将要爬取的新浪文章的网址
url = "http://news.sina.com.cn/c/xl/2018-07-18/doc-ihfnsvyz7503763.shtml"

#获得文章的内容
def getNewsContent(newsurl):
    #访问网页,res == 200,则访问成功
    res = requests.get(newsurl) 
    #制定编码格式 'utf-8'
    res.encoding = 'utf-8'  

    # res.text 为该网页的html文件
    # 使用BeauitfulSoup 对 html(res.text)进行内容提取
    # BeauitfulSoup 中文官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id37
    soup = BeautifulSoup(res.text, 'html.parser')
    
    # 使用BeauitfulSoup的CSS选择器
    # BeauitfulSoup的CSS选择器的基本用法 见附录1 
    context = ''
    for Pargraph in soup.select('#article_content p')[:-2]:
        context += (Pargraph.text)
        context += '\n'
    return context

def getNewsDetail(newsurl):
    result = {}
    res = requests.get(newsurl)  
    res.encoding = 'utf-8'  
    soup = BeautifulSoup(res.text, 'html.parser')
    
    # 获得文章的标题
    result['title'] = soup.select('.main-title')[0].text  
    # 获得文章的时间
    result['date'] = soup.select('.date')[0].text
    result['context'] = getNewsContent(newsurl)
    print(result['title'])  
    print(result['date'])
    print(result['context'])

getNewsDetail(url)

 

附录一:

### 附录一 ###
CSS选择器
# BeauitfulSoup 中文官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id37

Beautiful Soup支持大部分的CSS选择器 [6] ,在 Tag 或 BeautifulSoup 对象的 .select() 方法中传入字符串参数,即可使用CSS选择器的语法找到tag:

soup.select("title")
# [The Dormouse's story]

soup.select("p nth-of-type(3)")
# [

...

] 通过tag标签逐层查找: soup.select("body a") # [Elsie, # Lacie, # Tillie] soup.select("html head title") # [The Dormouse's story] 找到某个tag标签下的直接子标签 [6] : soup.select("head > title") # [The Dormouse's story] soup.select("p > a") # [Elsie, # Lacie, # Tillie] soup.select("p > a:nth-of-type(2)") # [Lacie] soup.select("p > #link1") # [Elsie] soup.select("body > a") # [] 找到兄弟节点标签: soup.select("#link1 ~ .sister") # [Lacie, # Tillie] soup.select("#link1 + .sister") # [Lacie] 通过CSS的类名查找: soup.select(".sister") # [Elsie, # Lacie, # Tillie] soup.select("[class~=sister]") # [Elsie, # Lacie, # Tillie] 通过tag的id查找: soup.select("#link1") # [Elsie] soup.select("a#link2") # [Lacie] 通过是否存在某个属性来查找: soup.select('a[href]') # [Elsie, # Lacie, # Tillie] 通过属性的值来查找: soup.select('a[href="http://example.com/elsie"]') # [Elsie] soup.select('a[href^="http://example.com/"]') # [Elsie, # Lacie, # Tillie] soup.select('a[href$="tillie"]') # [Tillie] soup.select('a[href*=".com/el"]') # [Elsie] 通过语言设置来查找: multilingual_markup = """

Hello

Howdy, y'all

Pip-pip, old fruit

Bonjour mes amis

""" multilingual_soup = BeautifulSoup(multilingual_markup) multilingual_soup.select('p[lang|=en]') # [

Hello

, #

Howdy, y'all

, #

Pip-pip, old fruit

] 对于熟悉CSS选择器语法的人来说这是个非常方便的方法.Beautiful Soup也支持CSS选择器API, 如果你仅仅需要CSS选择器的功能,那么直接使用 lxml 也可以,而且速度更快,支持更多的CSS选择器语法, 但Beautiful Soup整合了CSS选择器的语法和自身方便使用API.

 

你可能感兴趣的:(#,----爬虫,#,----Python)