重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

大数据中如何爬取一个网站的信息

大数据中如何爬取一个网站的信息,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联公司主要从事成都网站设计、成都做网站、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务江夏,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务: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即可。

关于大数据中如何爬取一个网站的信息问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


网页标题:大数据中如何爬取一个网站的信息
文章来源:http://cqcxhl.com/article/jghejg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP