问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python scrapy如何爬取今日头条的文章

发布网友 发布时间:2022-05-10 07:19

我来回答

2个回答

懂视网 时间:2022-05-10 11:40

这篇文章主要跟大家介绍了利用python爬取散文网文章的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

本文主要给大家介绍的是关于python爬取散文网文章的相关内容,分享出来供大家参考学习,下面一起来看看详细的介绍:

效果图如下:


配置python 2.7


 bs4

 requests

安装 用pip进行安装 sudo pip install bs4


sudo pip install requests

简要说明一下bs4的使用因为是爬取网页 所以就介绍find 跟find_all

find跟find_all的不同在于返回的东西不同 find返回的是匹配到的第一个标签及标签里的内容

find_all返回的是一个列表

比如我们写一个test.html 用来测试find跟find_all的区别。

内容是:


<html>
<head>
</head>
<body>
<p id="one"><a></a></p>
<p id="two"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >abc</a></p>
<p id="three"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >three a</a></p>
<p id="four"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >four<p>four p</p><p>four p</p><p>four p</p> a</a></p>
</body>
</html>

然后test.py的代码为:


from bs4 import BeautifulSoup
import lxml

if __name__=='__main__':
 s = BeautifulSoup(open('test.html'),'lxml')
 print s.prettify()
 print "------------------------------"
 print s.find('p')
 print s.find_all('p')
 print "------------------------------"
 print s.find('p',id='one')
 print s.find_all('p',id='one')
 print "------------------------------"
 print s.find('p',id="two")
 print s.find_all('p',id="two")
 print "------------------------------"
 print s.find('p',id="three")
 print s.find_all('p',id="three")
 print "------------------------------"
 print s.find('p',id="four")
 print s.find_all('p',id="four")
 print "------------------------------"

运行以后我们可以看到结果当获取指定标签时候两者区别不大当获取一组标签的时候两者的区别就会显示出来


所以我们在使用时候要注意到底要的是什么,否则会出现报错

接下来就是通过requests 获取网页信息了,我不太懂别人为什么要写heard跟其他的东西

我直接进行网页访问,通过get方式获取散文网几个分类的二级网页然后通过一个组的测试,把所有的网页爬取一遍


def get_html():
 url = "https://www.sanwen.net/"
 two_html = ['sanwen','shige','zawen','suibi','rizhi','novel']
 for doc in two_html:
 i=1
 if doc=='sanwen':
 print "running sanwen -----------------------------"
 if doc=='shige':
 print "running shige ------------------------------"
 if doc=='zawen':
 print 'running zawen -------------------------------'
 if doc=='suibi':
 print 'running suibi -------------------------------'
 if doc=='rizhi':
 print 'running ruzhi -------------------------------'
 if doc=='nove':
 print 'running xiaoxiaoshuo -------------------------'
 while(i<10):
 par = {'p':i}
 res = requests.get(url+doc+'/',params=par)
 if res.status_code==200:
 soup(res.text)
 i+=i

这部分的代码中我没有对res.status_code不是200的进行处理,导致的问题是会不显示错误,爬取的内容会有丢失。然后分析散文网的网页,发现是www.sanwen.net/rizhi/&p=1

p最大值是10这个不太懂,上次爬盘多多是100页,算了算了以后再分析。然后就通过get方法获取每页的内容。

获取每页内容以后就是分析作者跟题目了代码是这样的


def soup(html_text):
 s = BeautifulSoup(html_text,'lxml')
 link = s.find('p',class_='categorylist').find_all('li')
 for i in link:
 if i!=s.find('li',class_='page'):
 title = i.find_all('a')[1]
 author = i.find_all('a')[2].text
 url = title.attrs['href']
 sign = re.compile(r'(//)|/')
 match = sign.search(title.text)
 file_name = title.text
 if match:
 file_name = sign.sub('a',str(title.text))

获取标题的时候出现坑爹的事,请问大佬们写散文你标题加斜杠干嘛,不光加一个还有加两个的,这个问题直接导致我后面写入文件的时候文件名出现错误,于是写正则表达式,我给你改行了吧。

最后就是获取散文内容了,通过每页的分析,获得文章地址,然后直接获取内容,本来还想直接通过改网页地址一个一个的获得呢,这样也省事了。


def get_content(url):
 res = requests.get('https://www.sanwen.net'+url)
 if res.status_code==200:
 soup = BeautifulSoup(res.text,'lxml')
 contents = soup.find('p',class_='content').find_all('p')
 content = ''
 for i in contents:
 content+=i.text+'
'
 return content

最后就是写入文件保存ok


 f = open(file_name+'.txt','w')

 print 'running w txt'+file_name+'.txt'
 f.write(title.text+'
')
 f.write(author+'
')
 content=get_content(url) 
 f.write(content)
 f.close()

三个函数获取散文网的散文,不过有问题,问题在于不知道为什么有些散文丢失了我只能获取到大概400多篇文章,这跟散文网的文章是差很多很多的,但是确实是一页一页的获取来的,这个问题希望大佬帮忙看看。可能应该做网页无法访问的处理,当然我觉得跟我宿舍这个破网有关系


 f = open(file_name+'.txt','w')
 print 'running w txt'+file_name+'.txt'
 f.write(title.text+'
')
 f.write(author+'
')
 content=get_content(url) 
 f.write(content)
 f.close()

差点忘了效果图


能会出现timeout现象吧,只能说上大学一定要选网好的啊!

热心网友 时间:2022-05-10 08:48


这位大神写的很详细,不过现在api这个接口有点变化,多了一个参数


经过测试,这个参数可以固定!

start_urls=[

'ao.com/api/pc/feed/?category=news_finance&utm_source=toutiao&widen=1&max_behot_time={0}&max_behot_time_tmp={0}&tadrequire=true&as={1}&cp={2}&_signature=7DQ2rwAAtiawWJlHXVZg8uw0Nr']


请求头

加密算法和js    感谢!

加密的js没找到,直接用大神写的解密方式



从redis获取数据重组


json数据


解析json数据

一开始使用的是,抽取"source_url"的数据,然后301重定向可以访问详细页,跑了几遍之后会有一些奇怪的url,最后发现这样的方式不行,然后重组url。


获取下一部分


下一部分,只使用10次

3.详细页解析


不是我们熟悉的html呈现,而是js的形式

解析:正则!!====>解析正文部分。


可以看到有'<>'的html里面的大于小于号

一开始是,把这些符号用正则替换


最后运行几次,有个别文章匹配方式跟这种有点不同,达不到通用,换方案!

这一段的正文,在浏览器上呈现,可以看到是一段html文字,所以想到转换,


etree呈现出来之后,我们可以提取出来,再次etree


解析

这种方式,目前运行正常

在这里只是提供一种方法,也许不是最好的,只要能达到目的就行!

也希望大家能有新的方法!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
YY聊天中哪些语音的会不会作为文件存下来 2023谷雨节气的含义 谷雨三候是什么 我老公欠债,外遇,我想离婚,怎么办 ...我提供了我的姓名,出生年月日,还有工作地点,会出什么事吗... 刚刚接到一个诈骗电话,问我要了我的姓名和出生年月日,会不会利用... 不小心接到骗子的电话,还告诉了我的姓名和出生年月日,要不要紧啊... 知道了姓名和出生年月日,能拿来作案吗? WOW安装要CD 是什么问题? 急急急、、、魔兽世界用盘安装时老要CD片 时怎么回事 取消以后就安装不... 每次下载魔兽世界安装中途都会断掉,要求插入什么CD,然后出现这么一段文... 创新5.1的声卡怎么调声音就好听了呀。。求哥姐帮助·。。·。。·。· 衣服上的口香糖怎么去掉? 5.1创新声卡 说话声音小怎么调试? 新手学MC喊麦,创新5.1声卡怎么调试?麦克风怎么才有声音,怎么才能达到最佳的效果 新手学MC喊麦,创新5.1声卡怎么调试?麦克风怎么才有声音?怎么才能达到最佳的效果? 飞乐音响违规被查年底会退市吗?到2020年的元月份会被强制退市吗? 如何成为一名真正的文学家?? 怀旧空吟闻笛赋到乡翻似烂柯人的典故 有什么作用 诗人在颔联中运用了闻笛赋和烂柯人的典故有何用意 诗人在颔联中运用了闻笛赋和烂柯人的典故有何用意? 怀旧空吟闻笛赋,到乡翻似烂柯人中的典故 《酬乐天扬州初逢席上见赠 》中 今日听君歌一曲,暂凭杯酒长精神 的哲理是什么? “怀旧空吟闻笛赋,到乡翻似烂柯人”中的两个典故,分别表现诗人怎样的思想感情? 怀旧空吟闻笛赋引用了什么典故,表达了什么 `怀旧空吟闻笛赋、到乡翻似烂柯人`一联、作者用向秀和王质两个典故表达了什么意思? “怀旧空吟闻笛赋,到乡翻似烂柯人”中有什么典故 谁知道“闻笛赋”的典故? 真我q2pro手机为什么QQ文件用 QQ浏览器或者WPS打不开 cpu使用率为什么突然升高? 电脑的CPU使用率怎么忽然间变的多了? 创新5.1声卡调试,谁能帮我调一下,win7系统 被盗用了该怎么办 创新7.1声卡如何调试好听的唱歌声音 创新5.1声卡怎么把监听音量调高 用创新5.1声卡 声音很大怎么调 被盗了登不上去怎么办怎么找回来? 被盗了,绑定的手机号也改了,怎么办? 紫薯粉是怎么做的啊? 被别人盗用了怎么办? 紫薯粉和大米粉怎么做成粒米制作过程 紫薯泥米粉的做法步骤图,紫薯泥米粉怎么做 被盗了怎么办 被盗了,没办法找回,怎么办 我的被人盗用了怎么办? 帮我想个LOL群名,和小炮有关的&#x2728;急求!! 有没有好看的甜宠小说可以推荐? LOL求一个群名。好听一点的。 lol群组名字大全 求个霸气点的LOL游戏群名字 以“英雄联盟“为主题的文艺QQ群的名字