<技术向>爬取一个网站的信息

发表于 Python, 干货, 技术原理, 爬虫, 程序语言 2016-11-30 阅读数: 104

假如我们要爬这个网站: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-PackageNamepackageName

就是你所需要安装的库的名称。

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即可。

欢迎关注微信公众号:幻象客

题图来自网络

幻象客 二维码

Add comment