0
点赞
收藏
分享

微信扫一扫

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

王远洋 2022-02-11 阅读 59

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


我们先随便找一栏:

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


然后对网页使用开发者工具提取我们想要的信息。还记得左上角这个鼠标+框框的图案(图中变蓝了)吗?点击它,然后点击标题。


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


右边会自动跳转到它的代码:


<技术向>爬取一个网站的信息_命令行_03



选择它的上一级,也就是上一个小三角形。如图:


<技术向>爬取一个网站的信息_命令行_04


右键-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),你会得到下面的信息,这样我们就提取完毕了。(点击查看大图)


<技术向>爬取一个网站的信息_安装方法_05


完整代码:




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)


最终结果(点击查看大图):


<技术向>爬取一个网站的信息_安装方法_06

你想要多少有多少,快速高效。


当然我这只是抛砖引玉(还有很多用法哦)



库的安装方法:



首先我们需要三个库,一个是Beautifulsoup,一个是requests,还有一个是lxml。


如果你用的是PyCharm,可以从File->Default Settings->project interpreter内添加这两个库,如图:


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


点击右边那个+号,输入你想要安装的库即可。


<技术向>爬取一个网站的信息_安装方法_08


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



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

举报

相关推荐

0 条评论