精华内容
下载资源
问答
  • 2017-02-16 回答需求:从门户网站爬取新闻,将新闻标题,作者,时间,内容保存到本地txt中。用到的python模块:importre#正则表达式importbs4#beautifulsoup4解析模块importurllib2#网络访问模块importnews#自己定义...

    2017-02-16 回答

    需求:

    从门户网站爬取新闻,将新闻标题,作者,时间,内容保存到本地txt中。

    用到的python模块:

    import re  # 正则表达式

    import bs4  # beautiful soup 4 解析模块

    import urllib2  # 网络访问模块

    import news   #自己定义的新闻结构

    import codecs  #解决编码问题的关键 ,使用codecs.open打开文件

    import sys   #1解决不同页面编码问题

    其中bs4需要自己装一下,安装方法可以参考:windows命令行下pip安装python whl包

    程序:

    #coding=utf-8

    import re  # 正则表达式

    import bs4  # beautiful soup 4 解析模块

    import urllib2  # 网络访问模块

    import news   #自己定义的新闻结构

    import codecs  #解决编码问题的关键 ,使用codecs.open打开文件

    import sys   #1解决不同页面编码问题

    reload(sys)                         # 2

    sys.setdefaultencoding('utf-8')     # 3

    # 从首页获取所有链接

    def getallurl(home):

    html = urllib2.urlopen(home).read().decode('utf8')

    soup = bs4.beautifulsoup(html, 'html.parser')

    pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+'

    links = soup.find_all('a', href=re.compile(pattern))

    for link in links:

    url_set.add(link['href'])

    def getnews(url):

    global newscount,maxnewscount  #全局记录新闻数量

    while len(url_set) != 0:

    try:

    # 获取链接

    url = url_set.pop()

    url_old.add(url)

    # 获取代码

    html = urllib2.urlopen(url).read().decode('utf8')

    # 解析

    soup = bs4.beautifulsoup(html, 'html.parser')

    pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+'  # 链接匹配规则

    links = soup.find_all('a', href=re.compile(pattern))

    # 获取url

    for link in links:

    if link['href'] not in url_old:

    url_set.add(link['href'])

    # 获取信息

    article = news.news()

    article.url = url  # url信息

    page = soup.find('div', {'id': 'page'})

    article.title = page.find('h1').get_text()  # 标题信息

    info = page.find('div', {'class': 'article-info'})

    article.author = info.find('a', {'class': 'name'}).get_text()  # 作者信息

    article.date = info.find('span', {'class': 'time'}).get_text()  # 日期信息

    article.about = page.find('blockquote').get_text()

    pnode = page.find('div', {'class': 'article-detail'}).find_all('p')

    article.content = ''

    for node in pnode:  # 获取文章段落

    article.content += node.get_text() + '\n'  # 追加段落信息

    savenews(article)

    print newscount

    break

    except exception as e:

    print(e)

    continue

    else:

    print(article.title)

    newscount+=1

    finally:

    # 判断数据是否收集完成

    if newscount == maxnewscount:

    break

    def savenews(object):

    file.write("【"+object.title+"】"+"\t")

    file.write(object.author+"\t"+object.date+"\n")

    file.write(object.content+"\n"+"\n")

    url_set = set()  # url集合

    url_old = set()  # 爬过的url集合

    newscount = 0

    maxnewscount=3

    home = 'http://baijia.baidu.com/'  # 起始位置

    getallurl(home)

    file=codecs.open("d:\\test.txt","a+") #文件操作

    for url in url_set:

    getnews(url)

    # 判断数据是否收集完成

    if newscount == maxnewscount:

    break

    file.close()

    新闻文章结构

    #coding: utf-8

    # 文章类定义

    class news(object):

    def __init__(self):

    self.url = none

    self.title = none

    self.author = none

    self.date = none

    self.about = none

    self.content = none

    对爬取的文章数量就行统计。

    展开全文
  • 一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档,网站网页结构算是比较规整,简单清晰明了,资讯新闻内容的采集和保存!应用到的库requests,time,re,UserAgent,etreeimport requests...

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档,网站网页结构算是比较规整,简单清晰明了,资讯新闻内容的采集和保存!

    s2muqoxl0rk.jpg

    应用到的库

    requests,time,re,UserAgent,etree

    import requests,time,re

    from fake_useragent import UserAgent

    from lxml import etree

    列表页面

    fparqksizdu.jpg

    列表页,链接xpath解析

    href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')

    详情页

    3i20jwmt4wf.jpg

    buvwlqevo2m.jpg

    内容xpath解析

    h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]

    author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]

    details=req.xpath('//div[@class="content-l detail"]/p/text()')

    内容格式化处理

    detail='\n'.join(details)

    标题格式化处理,替换非法字符

    pattern = r"[\/\\\:\*\?\"\<\>\|]"

    new_title = re.sub(pattern, "_", title) # 替换为下划线

    保存数据,保存为txt文本

    def save(self,h2, author, detail):

    with open(f'{h2}.txt','w',encoding='utf-8') as f:

    f.write('%s%s%s%s%s'%(h2,'\n',detail,'\n',author))

    print(f"保存{h2}.txt文本成功!")

    遍历数据采集,yield处理

    def get_tasks(self):

    data_list = self.parse_home_list(self.url)

    for item in data_list:

    yield item

    程序运行效果

    m2lqtwyhfgo.gif

    程序采集效果

    1xqg4eevylo.jpg

    附源码参考:

    # -*- coding: UTF-8 -*-

    import requests,time,re

    from fake_useragent import UserAgent

    from lxml import etree

    class RandomHeaders(object):

    ua=UserAgent()

    @property

    def random_headers(self):

    return {

    'User-Agent': self.ua.random,

    }

    class Spider(RandomHeaders):

    def __init__(self,url):

    self.url=url

    def parse_home_list(self,url):

    response=requests.get(url,headers=self.random_headers).content.decode('utf-8')

    req=etree.HTML(response)

    href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')

    print(href_list)

    for href in href_list:

    item = self.parse_detail(f'https://yz.chsi.com.cn{href}')

    yield item

    def parse_detail(self,url):

    print(f">>正在爬取{url}")

    try:

    response = requests.get(url, headers=self.random_headers).content.decode('utf-8')

    time.sleep(2)

    except Exception as e:

    print(e.args)

    self.parse_detail(url)

    else:

    req = etree.HTML(response)

    try:

    h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]

    h2=self.validate_title(h2)

    author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]

    details=req.xpath('//div[@class="content-l detail"]/p/text()')

    detail='\n'.join(details)

    print(h2, author, detail)

    self.save(h2, author, detail)

    return h2, author, detail

    except IndexError:

    print(">>>采集出错需延时,5s后重试..")

    time.sleep(5)

    self.parse_detail(url)

    @staticmethod

    def validate_title(title):

    pattern = r"[\/\\\:\*\?\"\<\>\|]"

    new_title = re.sub(pattern, "_", title) # 替换为下划线

    return new_title

    def save(self,h2, author, detail):

    with open(f'{h2}.txt','w',encoding='utf-8') as f:

    f.write('%s%s%s%s%s'%(h2,'\n',detail,'\n',author))

    print(f"保存{h2}.txt文本成功!")

    def get_tasks(self):

    data_list = self.parse_home_list(self.url)

    for item in data_list:

    yield item

    if __name__=="__main__":

    url="https://yz.chsi.com.cn/kyzx/jyxd/"

    spider=Spider(url)

    for data in spider.get_tasks():

    print(data)

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: Python爬虫爬取新闻资讯案例详解

    本文地址: http://www.cppcns.com/jiaoben/python/325160.html

    展开全文
  • #coding = utf-8;importre;importrequests;from datetime importdatetime;from bs4 importBeautifulSoup;classNews(object):'''广商校园新闻'''def __init__(self, url):self.url= ... #新闻网页地址self._dom_tree...

    #coding = utf-8;

    importre;importrequests;from datetime importdatetime;from bs4 importBeautifulSoup;classNews(object):'''广商校园新闻'''

    def __init__(self, url):

    self.url= url; #新闻网页地址

    self._dom_tree =self._tranfrom_dom_tree(url);

    self._show_infos= self._dom_tree.select(".show-info")[0].text.split();

    self._update_time= self._show_infos[0][5:] + " " + self._show_infos[1]; #最后更新时间

    def_tranfrom_dom_tree(self,url):'''将获取的html文本转化为dom树'''response=requests.get(url);

    response.encoding= "utf-8";return BeautifulSoup(response.text, "html.parser");#新闻标题

    @propertydeftitle(self):return self._dom_tree.select(".show-title")[0].text;#新闻作者

    @propertydefauothor(self):return self._show_infos[2][3:];#新闻审核

    @propertydefauditor(self):return self._show_infos[3][3:];#新闻发布单位

    @propertydeforigin(self):

    self._show_infos[4][3:];#新闻最后更新时间

    @propertydefupdate_time(self):returnself._update_time;

    @update_time.setterdefupdate_time(self, time):

    self._update_time=time;#点击次数

    @propertydeftimes(self):

    clickUrl= 'http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80'.format(self.news_id);

    res=requests.get(clickUrl)

    click= re.findall('(\d+)', res.text)[-1]returnclick#新闻标识

    @propertydefnews_id(self):

    time= datetime.strptime(self._update_time, '%Y-%m-%d %H:%M:%S');

    time= time.strftime("%m%d");

    re.match('http://news.gzcc.cn/html/2019/.*/(\d+).html', self.url).group(1)if __name__ == "__main__":

    html_url= "http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0322/11047.html";

    news= News(html_url);

    展开全文
  • 因为学习需要,想自己弄一些语料玩玩,新闻联播似乎是个不错的选择,然后百度了一下:感觉还是挺多的。。。。所以我选择了第二个。。就是http://www.xwlbo.com/txt.html这个网址。看了一下,这个网址是以_1的方式...

    因为学习需要,想自己弄一些语料玩玩,新闻联播似乎是个不错的选择,然后百度了一下:

    1713916-20190613005432809-1504526508.png

    感觉还是挺多的。。。。所以我选择了第二个。。就是http://www.xwlbo.com/txt.html这个网址。

    看了一下,这个网址是以_1的方式翻页的。

    1713916-20190613005642343-278995695.png

    1713916-20190613005658684-1890691993.png

    一共有47页,数据追溯到

    似乎还可以。。。。

    分析了下源代码。列表页的文章是用一个列表维护的:

    1713916-20190613005917939-1596947549.png

    1713916-20190613005859955-793259868.png

    文章内的文字爬取难度一般,但是比较乱

    1713916-20190613005956413-1504198870.png

    我的思路是:

    先爬取文章ID号,再遍历ID号爬一遍各个ID下的新闻的内容

    那就, 直接上代码:

    python爬虫爬取网站内容时,如果什么也没带,即不带报头headers,往往会被网站管理维护人员认定为机器爬虫,所以我们需要伪装浏览器的user-agent。

    这个是网上的模板,用来随机组成User-Agent

    #settings.py

    User_Agents =['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1','Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11','Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',

    ]

    获取文章的ID号

    importrandomimportreimportrequestsimportcodecsfrom spider.settings importUser_AgentsclassID_Spider(object):def __init__(self):#URL

    self.ur1 = "http://www.xwlbo.com/txt_"self.ur2= ".html"

    #Headers

    self.headers = {'User-Agent': random.choice(User_Agents)}

    self.output= open('d:\id.txt','w+')defdown_(self,offset):

    resp=Nonetry:

    resp= requests.get(self.ur1 + str(offset) + self.ur2 , headers =self.headers)exceptException as e:print(resp)returnrespdefget_(self,resp):

    reg= r'li>(.*?){1}'

    ifresp:returnre.findall(reg ,resp.text ,re.S)defid_(self,ss):for t inss:#dr = re.compile(r'

    dr = re.findall(r'\d{4,5}',dd)#id = re.findall(r'\\d',dr)

    try:print(dr[0])

    self.output.write(dr[0])

    self.output.write('\n')exceptException as e:continue

    defmain():

    ids=ID_Spider()

    offset= 1

    while(offset <= 47):

    ids.id_(ids.get_(ids.down_(offset)))

    offset+= 1

    if __name__ == '__main__':

    main()

    获取文章

    import random

    import re

    import time

    import requests

    from spider.settings import User_Agents

    id_file = open('d:\id','r')

    class NEWS_Spider(object):

    def __init__(self):

    #URL

    self.ur1 = "http://www.xwlbo.com/"

    self.ur2 = ".html"

    #Headers

    self.headers = {'User-Agent': random.choice(User_Agents)}

    self.output = open('d:\\news.txt','w+')

    def down_(self,id):

    resp = None

    try:

    resp = requests.get(self.ur1 + str(id) + self.ur2 , headers = self.headers)

    except Exception as e:

    print(resp)

    print(resp)

    return resp

    def get_(self,resp):

    reg = r'

    {1}'

    # reg = r'body>(.*?)

    展开全文
  • 展开全部需求:从门户网站爬2113取新闻5261,将新闻标题,作者,时间,内容保存到本4102地txt中。用到的python模块:1653import re # 正则表达式import bs4 # Beautiful Soup 4 解析模块import urllib2 # 网络访问...
  • 准备###本实例使用辅助工具Fiddler抓取网页数据和使用文档查看工具sublime正则过滤(也可使用其它文档编辑工具),python开发工具使用Pycharm编辑我们选取搜狐网的新闻页面进行爬取,对搜狐新闻以列表的形式显示出来...
  • 爬取最新消息列表,再循环爬取对应url中的新闻详细数据# -*- coding: utf-8 -*-"""Spyder Editornews.py."""import requestsfrom bs4 import BeautifulSoupfrom datetime import datetimeimport jsonimport xlwt...
  • )"',str(base_tag))[0] # print base_url # 输出各专题链接 self.url.put(base_url) # 将专题链接放入Quene中 # 进入各专题页,爬取标题title (首页title) def send_url(self): while not self.url.empty(): base_...
  • 爬取某站时并做简单分析时,遇到如下问题和大家分享,避免犯错:一丶网站的path为 /info/1013/13930.htm ,其中13930为不同新闻的 ID 值,但是这个数虽然为升序,但是没有任何规律的升序。解决办法:使用 range ...
  • 准备###本实例使用辅助工具Fiddler抓取网页数据和使用文档查看工具sublime正则过滤(也可使用其它文档编辑工具),python开发工具使用Pycharm编辑我们选取搜狐网的新闻页面进行爬取,对搜狐新闻以列表的形式显示出来...
  • Python爬取数据并写入MySQL数据库的实例首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据。按 F12 或 ctrl+u 审查元素,结果如下:结构很清晰简单,我们就是要爬 tr 标签里面的 style 和 tr 下...
  • Python爬取数据并写入MySQL数据库的实例发布时间:2020-08-23 07:44:13来源:脚本之家阅读:63首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据。按 F12 或 ctrl+u 审查元素,结果如下:结构很...
  • 一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档,网站网页结构算是比较规整,简单清晰明了,资讯新闻内容的采集和保存!应用到的库requests,time,re,UserAgent,etreeimport requests...
  • 之前在爬取百度新闻的时候遇到了一个问题,就是百度新闻的种类太多了,没有办法统一的提取,而且每个网站的请求方式都不太一样,一个一个的写有太麻烦,所有就就找了下有没有通用的包,结果还真的有,而且十份强大。...
  • 原博文2018-10-25 20:17 −from newspaper import Article url = '你想要爬取的网站url' news = Article(url, language='zh') news .download() #先下载 news .parse() #再解析 print(news.text) #新闻正文 ......
  • 参数data指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头 1 #爬取新浪新闻 2 importurllib.request3 importre4 data=...
  • 本次主要是爬取网易新闻,包括新闻标题、作者、来源、发布时间、新闻正文。首先我们打开163的网站,我们随意选择一个分类,这里我选的分类是国内新闻。然后鼠标右键点击查看源代码,发现源代码中并没有页面正中的...
  • 环境win7 Python 3.6工具PyCharm2017直接命令 pip install cx_Oracle导入cx_Oracleimportcx_Oracle1.Python连接数据库 写法有多种 百度很多try:tns = cx_Oracle.makedsn('localhost','1521','ORABI')db = cx_Oracle....
  • 前言爬取豆瓣的 top250 电影榜环境请自行 安装python 需要的包BeautifulSoupMySQL-python开始创建一个py文件 demo3.py分析页面结构 1.png导入一些包 2.png定义一个DouBanSpider类以及一些方法 3.png 4.png 5.png 6....
  • #python 3.5from urllib.request import urlopenfrom urllib.request import urlretrievefrom bs4 import BeautifulSoupimport pymysqlconn = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='pmdb...
  • 一个做了反爬的36氪,返回数据恶心,感觉是一堆...(一)爬取环境win10python3scrapy(二)爬取过程(1)入口:搜索image.png(2)动态js数据加载,查看下一页操作:image.png(3)返回数据:image.png(4)请求链接...
  • 先开个坑,以后再填吧.......import requestsfrom bs4 import BeautifulSoupdef content(url):text = requests.get(url)text.encoding = ‘utf-8‘soup2 = BeautifulSoup(text.text,‘html5lib‘)header2 = soup2....
  • python + selenium 进行浏览器模拟爬取新浪国际新闻板块# -*- conding: utf8 -*-"""author : soliton/念旧Email : soliton.wang@gmail.comQQ : 1670829014Spider_News: 新浪新闻国际页面"""from selenium import ...
  • 本次将采用爬虫获取一些新闻数据,比如我们要获取新浪的一些新闻: 1、编写代码,获取新浪首页的网页源码: 运行效果:我们会看到程序输出了新浪网页的所有源代码: 网页源代码非常长,我们单纯通过split()函数来...
  • 1.前些天打开网易新闻,于是点开爬取新闻的评论。 2.以前爬取的网页都是静态的,都是源代码中直接就有,一眼就可以观察到的,而这次打开却不一样,根本没有自己想要的评论内容。然后通过搜索学习,知道了获取数据...
  • 最近学了一段时间的Python,想写个爬虫,去网上找了找,然后参考了一下自己写了一个爬取给定页面的爬虫。Python的第三方库特别强大,提供了两个比较强大的库,一个requests, 另外一个BeautifulSoup,这两个库目前...
  • Python爬取新闻网数据

    千次阅读 2020-11-24 14:24:25
    前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请...今天就爬取新闻网中的国际新闻栏目 点击显示更多新闻内容 可以看到相关的数据接口,里面有新闻标题以及新闻详情的url地址 如何
  • Python爬取文章内容

    2020-12-20 17:18:05
    python一、安装requests库 和 bs4二、分析步骤三、实践(爬取文章)1、代码:2、效果:3、说明:四、合并txt文件五、解决爬虫获取网页,出现乱码问题六、实践(爬取小说)1、代码:2、效果:3、说明 一、安装...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,844
精华内容 3,137
关键字:

python爬取新闻内容

python 订阅