大数据中如何爬取一个网站的信息,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联公司主要从事成都网站设计、成都做网站、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务江夏,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
假如我们要爬这个网站:http://stuu.scnu.edu.cn/articles 的摘要和图片。
首先引入库:
from bs4 import BeautifulSoup
import requests
这两个库是爬虫工具,文章底部有安装方法。
然后定义url为我们需要爬虫的网址,并且用requests.get()得到这个网址的内容存放在wb_data中。
url = "http://stuu.scnu.edu.cn/articles"
wb_data = requests.get(url)
对这些内容进行解析,这里要用到lxml,也是一种库。
soup = BeautifulSoup(wb_data.text,'lxml')
我们先随便找一栏:
然后对网页使用开发者工具提取我们想要的信息。还记得左上角这个鼠标+框框的图案(图中变蓝了)吗?点击它,然后点击标题。
右边会自动跳转到它的代码:
选择它的上一级,也就是上一个小三角形。如图:
右键-Copy-Copy selector,会得到下面这个:
#main-wrap-left > div.bloglist-container.clr > article:nth-child(5) > div.home-blog-entry-text.clr
把'#'号到'>'号的部分去掉,再把:nth-child(5)去掉,这个指的是第五个标签,如果不去掉的话你只会得到第五个标签的内容。
得到:div.bloglist-container.clr > article > div.home-blog-entry-text.clr
如果你对图片、摘要,分别做同样的事情,你会得到
图片:div.bloglist-container.clr > article> a > div > img
摘要:div.bloglist-container.clr > article > div.home-blog-entry-text.clr > p
然后定义一个 :变量=soup.select("你刚刚得到的内容")
titles = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr")
texts = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr > p")
imgs = soup.select("div.bloglist-container.clr > article > a > div > img")
这里是把这些内容提取出来
再把他们放到字典里(title,text,img都是新变量):
for title,text,img in zip(titles,texts,imgs):
data = {
"标题":title.get_text(),
"摘要":text.get_text(),
"图片":img.get('src')
}
然后print(data),你会得到下面的信息,这样我们就提取完毕了。(点击查看大图)
完整代码:
from bs4 import BeautifulSoup
import requests
url = "http://stuu.scnu.edu.cn/articles"
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
titles = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr")
texts = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr > p")
imgs = soup.select("div.bloglist-container.clr > article > a > div > img")
for title,text,img in zip(titles,texts,imgs):
data = {
"标题":title.get_text(),
"摘要":text.get_text(),
"图片":img.get('src')
}
print(data)
如果你不止想得到仅仅这十个信息,那么你可以构造函数。
我们注意到第二页的域名是:http://stuu.scnu.edu.cn/articles?paged=2
这是个重点,我们可以把2换成别的数字:
url = "http://stuu.scnu.edu.cn/articles?paged="
然后再把刚刚的内容变成一个函数:
def get_page(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
titles = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr")
texts = soup.select("div.bloglist-container.clr > article > div.home-blog-entry-text.clr > p")
imgs = soup.select("div.bloglist-container.clr > article > a > div > img")
for title,text,img in zip(titles,texts,imgs):
data = {
"标题":title.get_text(),
"摘要":text.get_text(),
"图片":img.get('src')
}
print(data)
再添加一个能够调整所需要的网页数目,并调用get_page的函数:
def getmorepage(start,end):
for i in range (start,end):
get_page(url+str(i))
最后你想要多少页的数据?
getmorepage(1,10)
最终结果(点击查看大图):
你想要多少有多少,快速高效。
当然我这只是抛砖引玉(还有很多用法哦)
库的安装方法:
首先我们需要三个库,一个是Beautifulsoup,一个是requests,还有一个是lxml。
如果你用的是PyCharm,可以从File->Default Settings->project interpreter内添加这两个库,如图:
点击右边那个+号,输入你想要安装的库即可。
Linux下安装:
1.有PyCharm的直接按照上文操作即可
2.没有的话请这样操作:
sudo apt-get install Python-PackageName
packageName 就是你所需要安装的库的名称。
windows下安装:
1.首先确定你安装了pip:
进入命令行(运行-CMD)输入 pip --version
如果没有报错则证明你已经安装,可以继续下面的步骤。
2.如果你已经有了PyCharm,可以像上面PyCharm部分所说的那样操作
如果没有的话你有两种选择,一是压缩包,二是pip中打命令,这里说第二种
在命令行里输入:
pip3 install packageName
packageName 就是你所需要安装的库的名称
如果遇到权限问题,请输入:
sudo pip install packageName
安装成功后会提示:
Successfully installed PackageName
如果你是python 2. 那么把pip3换成pip即可。
关于大数据中如何爬取一个网站的信息问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。