一、简介
这篇文章主要是使用python中的requests和BeautifulSoup库来爬取上万篇的新闻文章。我这里以科技类新闻为例来爬取2000篇新闻文章http://news.chinairn.com/News/moref9fff1.html

二、爬取网页源代码
在python中爬取网页源代码的库主要有urllib、requests,其中requests使用得比较多,另外说明下urllib这个库,在python2中存在urllib2、urllib两个库来爬取网页源代码,但是在python3中将这两个库合并了,就只有urllib这一个库了,但是使用的人相对没有那么多。

上图源代码就是使用requests中得get函数来获取,其中变量html就是源代码了。

三、解析网页源代码
这一步主要就是利用BeautifulSoup库来解析,在python中还有re、lxml、PyQuery等库,下一步会使用PyQuery库来解析。在获取到网页得源代码之后,最重要的就是如何在网页代码中提取我们所需要的信息(新闻标题和新闻链接),先上代码:

这个代码里面最重要的的一行代码就是news=soup.select(’.list ul li dl da a’),可以打开简介中的链接:http://news.chinairn.com/News/moref9fff1.html按下F12键进入审查元素,找到我们需要获取的新闻标题和新闻链接。然后根据网页源代码中的class(.)、id(#)、标签(空)等来定位新闻标题和新闻链接。这一步我觉得是最重要的,你们要是爬取其他网址,select里面是不一样的,看到class就使用(.),看到id就使用(#)、标签就不需要加什么。最后再使用一个for循环将第一页中的20篇文章的标题和链接保存到变量news_link、news_title。

四、获取每篇新闻内容
根据上一步得到的新闻链接来获取这个链接里的新闻内容。

这里面可以看到doc=pq(texts)中的pq就是使用了PyQuery库来解析,这个库在使用时其实更加好用,我就在这里试了以下。new_content=doc(’.nylt .article p’).text()这一步就类似于上一步中soup.select()。然后每页中的20篇文章保存下来。

五、循环多页
根据上面几步已经成功的将20篇文章下载了,接下来就是循环下载100页了。
最后再根据这一步循环多页了。

六、全部代码
最后就是上全部源代码了。
import requests
from bs4 import BeautifulSoup
import time
from pyquery import PyQuery as pq

#获取全部页的网址
def All_url(url):
page=1
while page<=100:
urls = r"http://news.chinairn.com/News/moref9fff"+str(page)+".html"
print(“正在爬取第%d页。”%(page))
print(urls)
page=page+1
get_one_page(urls)

#获取每页源代码
def get_one_page(urls):
headers={‘user-agent’:‘Mozilla/5.0’}
r=requests.get(urls,headers=headers)#保证不受服务器反爬虫限制
r.encoding=r.apparent_encoding#保证获取源代码中的中文能正常显示
html=r.text
parse_one_page(html)

#解析每页网页源代码,并获取新闻链接与新闻标题
def parse_one_page(html):
count=0
soup=BeautifulSoup(html,‘html.parser’)
news=soup.select(’.list ul li dl dt a’)
for new in news:
link = new[‘href’]#获取html中所需要部分的新闻链接
news_link=‘http://news.chinairn.com’+link
news_title = new.string#获取html中所需要部分的新闻名字
print(news_link)
print(news_title)
count = count + 1 #统计每页爬取的的数量
print(‘正在爬取第%d篇’%(count))
parser_more_page(news_link,news_title)

#获取所有页数的新闻内容
def parser_more_page(news_link,news_title):
res=requests.get(news_link)
res.encoding=res.apparent_encoding
texts=res.text
doc=pq(texts)
new_content=doc(’.nylt .article p’).text()
file_path=‘D:/technology.txt’
file=open(file_path,“a”,encoding=‘utf-8-sig’)
#加上encoding参数,保证存储在txt与csv文件中中文字符不乱码
file.write(new_content + ‘\n’ + ‘\n’)
file.close()
print(“成功一个文件”)
def main():
url=‘http://news.chinairn.com/News/moref9fff1.html’
All_url(url)
if name == ‘main’:
s=time.time()
main()
e=time.time()
print(“完成!!时间为:{}”.format(e-s))


以上就结束了所有的介绍啦,我也只是看书看视频看博客学的,里面确实还存在很多的不足之处有大神看到的话,可以帮忙指出来。万分感谢!!!也希望能为正在学习爬虫的你,提供一点点思路或者看法。谢谢啦!

使用Python爬取多篇各类新闻文章相关推荐

  1. 使用Python爬取CSDN历史博客文章列表,并生成目录

    使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...

  2. Python 爬取 6000 篇文章分析 CSDN 是如何进入微信 500 强的

    CSDN 小姐姐们恭祝所有朋友新年快乐! 作者 | 罗昭成,设计 | 张藐,责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 亲爱的小伙伴们,马上就到 2019 年了,你的 2018 年 ...

  3. Python爬取网易云各类音乐的详细信息

    python爬虫:通过selenium+requests爬取各类音乐的详细信息 完整代码如下: from selenium import webdriver from lxml import etre ...

  4. python爬取今日头条热点新闻事件,Python爬虫实战入门五:获取JS动态内容—爬取今日头条...

    之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的. 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成 ...

  5. Python爬取微信公众号历史文章进行数据分析,发现2017年运营总结,可以这样写!...

    作者:刘晓明,互联网公司运维技术负责人,拥有10年的互联网开发和运维经验.一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能. 广告时间:最后给自己代个盐~~欢迎大家有空时翻下我牌子(知 ...

  6. python 爬取今日头条热点新闻

    嗯,今天就让我们来一起爬爬今日头条的热点新闻吧! 今日头条地址:https://www.toutiao.com/ch/news_hot/ 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模 ...

  7. 利用Python爬取金十数据新闻事件

    刚入门爬虫,由于女朋友的工作需要,便写了这个爬虫程序.本人也是第一次发帖, 相信爬虫也没什么好介绍的.直接上代码. from selenium import webdriver from bs4 im ...

  8. python抓取微信公众号新闻文章图片

    在看公众号新闻的时候,总会有一些有用的PPT图片啥的想保存下来. 那么用python如何抓取来,简单介绍一下. 比如这个网址,https://mp.weixin.qq.com/s/-rj91sCpea ...

  9. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...

最新文章

  1. python 爬虫之爬取大街网(思路)
  2. ffmpeg 从mp4上提取H264的nalu
  3. tomcat访问软链接资源
  4. android预加载app,Android欢迎页预加载首页数据
  5. ES6基础之——对象表达式
  6. 谷歌AI:根据视频生成深度图,效果堪比激光雷达
  7. hibernate分页中跳转到第几页的功能
  8. android - 调用系统分享功能分享图片
  9. Mac在Anaconda中安装XGBoost
  10. Altium AD20的PCB板框绘制、定义板子形状、重新设置原点、放置尺寸标注
  11. web前端基础知识-(六)jQuery-补
  12. 在AIX 5.3+HACMP 5.4以上环境安装10gR2 10.2.0.1 RAC CRS Clusterware必须先运行Patch 6718715中的rootpre.sh...
  13. postman下载与汉化
  14. matlab二重积分运算,matlab二重积分
  15. win7连接打印机0x0000011b错误的解决办法
  16. [Excel函数] SUM函数 | SUMIF函数 | SUMIFS函数
  17. python socket
  18. LeetCode 643 题解
  19. python大神的成长之路普通话三分钟_三分钟普通话说话30篇-我的成长之路 - 希赛网...
  20. 线上教学困难多?来试试轻量级互动课堂方案

热门文章

  1. 华为集团“云计算”战略和解决方案
  2. 模板方法设计模式(详解加案例)
  3. 数据挖掘 是“大忽悠”还是“懵懂少年”
  4. SpringBoot+webSocket实现扫码登录功能
  5. 沈园之魂牵梦绕情难却
  6. 打开PS总提示访问钥匙串密钥的解决办法
  7. 解码方法(一条包含字母 A-Z 的消息通过以下方式进行了编码)
  8. 职业对口升学计算机英语2016,2016河南对口升学(英语)
  9. 为什么Python不适合写游戏?
  10. olap分析平台的设计与实现(八) -mdx语法部分概念