Python爬取站长之家网页信息(附详细源码)

打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

一、实验目的

在信息时代高速发展的现在,“互联网+”的使用日趋zhanzhang过互联网学习知识,传递思想,沟通交流,在众多数据和用户的碰
撞中,互联网经济应运而生。学会利用网络收集信息是最基本的要求,接下来,我将以“行业网站”——站长之
家为例,通过Python爬取各个网站的信息(主要为名称、Alexa周排名、反链数等)来更直观、准确地分析其中各个网站在互联网
上的竞争力排名,以此了解用户对某些类型网站的喜好程度。
二、实验项目

通过Python爬取“行业网站”——站长之家中各网站的名称、Alexa周排名、反链数等信息
三、实验操作步骤

(一)观察网页

首先通过浏览器进入“行业网站”——站长之家,查看网页的基本结构,通过改变网页得出为静态网页的结论,以下为网站名称及网址:
行业网站 - 行业网站排名 - 网站排行榜 (chinaz.com)
  1. https://top.chinaz.com/hangye
复制代码
 

以上图片中画圈部分为本次爬虫需要爬取信息。
进入网站源代码界面,查看我们所需要爬取内容的相关代码以及网络请求情况。

右键点击网页出现审查界面如下:

在此源代码界面,我们能看到我们需要的百度、Alexa周排名、反链数等字样,稍后我们要做的就是将其提取出来。
(二)请求数据

点击网页名字再点击标头,我们就能看到其真实网站,同时发现其请求方法是GET,状态代码Status Code为200通过,说明请求
成功。

继续点击响应观察,发现网页响应中出现charset=utf-8,说明其编码格式为“utf-8”。因其与requests库默认编码方式不同,需要进
行调整赋值。

导入第三方数据库
  1. Python学习交流Q群:903971231####
  2. #导入库
  3. import requests   #requests库请求网页
  4. from lxml import etree #进行文件格式解析
  5. import pandas as pd  #pandas库保存索引信息
  6. 设置headers与请求链接
  7. ```python
  8. #设置请求头
  9. headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"}
  10. ```python
  11. #requests请求链接
  12. rq = requests.get(url,headers=headers).text
复制代码
 
 (三)解析数据

使用lxml模块中的etree方法将字符串转化为html标签,再使用xpath方法获取多行信息。
我们观察到,需要的网站信息存储在class='listCentent’的ul标签下,该标签在html标签下的body标签下第四个div标签下的第三个
div标签下的第二个div标签下。

其Xpath绝对路径如下:
  1. /html/body/div[4]/div[3]/div[2]/ul
复制代码
 
我们有个更简便的方法可以获得其绝对路径:右键点击Copy-Copy full Xpath,即可获得该标签Xpath的绝对路径。

站长之家的各网站信息都存储在上述ul标签下的li标签下。

我们可以获取各网站信息存储的li标签的list。
  1. li_list = html.xpath("/html/body/div[4]/div[3]/div[2]/ul/li")
复制代码
 
我们想获取网站名称、网址、Alexa周排名、反链数等信息,发现其在li标签的下级标签中
  1. python学习交流Q群:903971231####
  2. #使用lxml模块中的etree方法将字符串转化为html标签
  3. html = etree.HTML(rq)
  4. #用xpath定位标签位置
  5. li_list = html.xpath("/html/body/div[4]/div[3]/div[2]/ul/li")
  6. #获取要爬取内容的详情链接
  7. for li in li_list:
  8.     #爬取网站名称
  9.     sitename = li.xpath("./div[2]/h3/a/text()")[0]
  10.     #爬取网址
  11.     websites = li.xpath("./div[2]/h3/span/text()")[0]
  12.     #爬取Alexa周排名
  13.     Alexa = li.xpath("./div[2]/div/p[1]/a/text()")[0]
  14.     #爬取反链数
  15.     Antichain = li.xpath("./div[2]/div/p[4]/a/text()")[0]
复制代码
 
(四)储存数据

上述步骤中,我们已经将import pandas as pd输入,随后通过pandas的to_csv将数据存入csv中,将数据导出为csv文档。
  1. #pandas中的模块将数据存入
  2. df = pd.DataFrame({
  3. "网站名称" : sitename_oyr,
  4. "网址" : websites_oyr,
  5. "Alexa周排名" : Alexa_oyr,
  6. "反链数" : Antichain_oyr,
  7. })
  8. #储存为csv文件
  9. df.to_csv("paiming.csv" , encoding='utf_8_sig', index=False)
复制代码
 
(五)循环爬取前15页数据信息

利用url统一资源定位符快速定位网址https://top.chinaz.com/hangye/index_shenghuo_fenlei_0.html,利用代码将0位置替换为{},
随后使用format(a*15)作为其中填充,以此循环15次。

运行代码:
  1. for a in range(15):
  2.     #爬取网站的网址并且循环爬取前15页的内容
  3.     url = "https://top.chinaz.com/hangye/index_shenghuo_fenlei_{}.html".format(a*15)
复制代码
 
(六)全套代码及运行结果

全部代码:
  1. #导入库import requestsfrom lxml import etreeimport pandas as pd#初始列表sitename_oyr,websites_oyr, Alexa_oyr, Antichain_oyr = [], [], [], []#设置请求头headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"}for a in range(15):       #爬取网站的网址并且循环爬取前15页的内容    url = "https://top.chinaz.com/hangye/index_shenghuo_fenlei_{}.html".format(a*15)       #requests请求链接    rq = requests.get(url,headers=headers).text        #使用lxml模块中的etree方法将字符串转化为html标签    html = etree.HTML(rq)        #用xpath定位标签位置    li_list = html.xpath("/html/body/div[4]/div[3]/div[2]/ul/li")    #获取要爬取内容的详情链接    for li in li_list:        #爬取网站名称        sitename = li.xpath("./div[2]/h3/a/text()")[0]        #爬取网址        websites = li.xpath("./div[2]/h3/span/text()")[0]        #爬取Alexa周排名        Alexa = li.xpath("./div[2]/div/p[1]/a/text()")[0]        #爬取反链数        Antichain = li.xpath("./div[2]/div/p[4]/a/text()")[0]        #输出        print(sitename)        print(websites)        print(Alexa)        print(Antichain)        #将字段存入初始化的列表中        sitename_oyr.append(sitename)        websites_oyr.append(websites)        Alexa_oyr.append(Alexa)        Antichain_oyr.append(Antichain)#pandas中的模块将数据存入
  2. df = pd.DataFrame({
  3. "网站名称" : sitename_oyr,
  4. "网址" : websites_oyr,
  5. "Alexa周排名" : Alexa_oyr,
  6. "反链数" : Antichain_oyr,
  7. })
  8. #储存为csv文件
  9. df.to_csv("paiming.csv" , encoding='utf_8_sig', index=False)
复制代码
 
编译器获取结果:
获取文档:

最后

今天的这篇文章到这里就结束了,下一章见。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表