很多朋友对于怎么偷网站滚动图源码分享和如何偷别人网站的源码不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
文中代码只是部分讲解,完整的代码放在文章末尾地址。
先实际感受一下我们要抓取的福利是什么?点击今日头条,在搜索栏输入街拍两个字,点开任意一篇文章,里面的图片即是我们要抓取的内容。
可以看到搜索结果默认返回了20篇文章,当页面滚动到底部时头条通过ajax加载更多文章,浏览器按下F12打开调试工具(我的是Chrome),点击Network选项,尝试加载更多的文章,可以看到相关的http请求:
可以看到请求的URL(RequestURL)为:http://www.toutiao.com/search_content/,其请求参数为:
很容易猜测offset表示偏移量,即已经请求的文章数;format为返回格式,这里返回的是json格式的数据;keyword是我们的搜索关键字;autoload应该是自动加载的指示标志,无关紧要;count为请求的新文章数量;_应该是请求发起时的时间戳。将请求的URL和这些查询参数拼接即组成完整的RequestURL,例如这次的RequestURL是:http://www.toutiao.com/search_content/?offset=20&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&_=1480675595492。
先让我们来看看这个请求为我们返回了什么样的数据。
importjson
frompprintimportpprint
fromurllibimportrequest
url=”http://www.toutiao.com/search_content/?offset=20&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&_=1480675595492″
withrequest.urlopen(url)asres:
d=json.loads(res.read().decode())
print(d)
这里我们首先通过request.urlopen(url)向这个url发送请求,返回的数据保存在res中,res是一个HttpResponse对象,通过调用其read方法获取实际返回的内容,由于read方法返回的是Python的bytes类型的字符串,通过调用其decode方法将其编码成string类型字符串,默认为UTF-8编码。由于数据以json格式返回,因此通过json.load方法将其转为Python的字典形式。
打印出这个字典,可以看到字典中有一个键‘data’对应着一个由字典组成的列表的值,分析可知这个值就是返回的全部文章的数据列表,稍微修改一下代码,来看看‘data’对应的值是什么样的:
withrequest.urlopen(url)asres:
d=json.loads(res.read().decode())
d=d.get(‘data’)
pprint(d)
这里使用了pprint让字典打印的出来的值更加的格式化,便于分析。可以看到这是一个由字典组成的列表,列表的每一个项代表一篇文章,包含了文章的全部基本数据,例如标题,文章的URL等。于是我们可以通过如下的方式来获取我们本次请求的全部文章的URL列表:
urls=[article.get(‘article_url’)forarticleindifarticle.get(‘article_url’)]
这里使用了列表推导式,循环文章列表,通过get(‘article_url’)获取到文章的URL,加上if判断条件是为了防止因为数据缺失而得到空的文章URL。我们将通过不断请求这些文章的URL,读取其内容,并把图片提取出来保存到我们的硬盘里。
先来处理一篇文章,看看我们如何把文章里的全部图片提取出来。
随便点开一个文章链接,按F12查看网页源代码,可以看到文章的主体部分位于一个id=”article-main”
的div里。这个div下有h1标签表示文章标题,另外一系列img标签,其src属性即保存着图片所在的链接,于是我们通过访问这些链接把图片下载下来,看看具体怎么做:
url=”http://www.toutiao.com/a6351879148420235522/”
withrequest.urlopen(url)asres:
soup=BeautifulSoup(res.read().decode(errors=’ignore’),’html.parser’)
article_main=soup.find(‘div’,id=’article-main’)
photo_list=[photo.get(‘src’)forphotoinarticle_main.find_all(‘img’)ifphoto.get(‘src’)]
print(photo_list)
#输出:
[‘http://p1.toutiaoimg.com/large/111200020f54729cd558′,’http://p1.toutiaoimg.com/large/11100005d3e8b9e69a88′,’http://p1.toutiaoimg.com/large/106b00058387c12351c7’,…]
这里我们请求文章的URL,将返回的内容(html)传递给BeautifulSoup为我们做解析。通过find方法找到article-main对应的div块,在该div块下继续使用find_all方法搜寻全部的img标签,并提取其src属性对应的值,于是我们便获得了该文章下全部图片的URL列表。现在要做的就是继续请求这些图片的URL,并把返回的图片数据保存到硬盘里。以一张图片示例:
photo_url=”http://p1.toutiaoimg.com/large/111200020f54729cd558″
photo_name=photo_url.rsplit(‘/’,1)[-1]+’.jpg’
withrequest.urlopen(photo_url)asres,open(photo_name,’wb’)asf:
f.write(res.read())
此时就可以在当前目录下看到我们保存下来的图片了。这里我们使用了URL最后一段的数字做为图片的文件名,并将其保存为jpg的格式。
基本步骤就是这么多了,整理下爬取流程:
指定查询参数,向http://www.toutiao.com/search_content/提交我们的查询请求。从返回的数据(JSON格式)中解析出全部文章的URL,分别向这些文章发送请求。从返回的数据(HTML格式)提取出文章的标题和全部图片链接。再分别向这些图片链接发送请求,将返回的图片输入保存到本地。修改查询参数,以使服务器返回新的文章数据,继续第一步。
运行此代码后一共爬取了大概1000多张图片:
完整项目地址:https://github.com/zmrenwu/toutiao.git
怎么偷网站滚动图源码分享的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何偷别人网站的源码、怎么偷网站滚动图源码分享的信息别忘了在本站进行查找哦。
