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

一、实验目的

在信息时代高速发展的现在,“互联网+”的使用日趋zhanzhang过互联网学习知识,传递思想,沟通交流,在众多数据和用户的碰

撞中,互联网经济应运而生。学会利用网络收集信息是最基本的要求,接下来,我将以“行业网站”——站长之

家为例,通过Python爬取各个网站的信息(主要为名称、Alexa周排名、反链数等)来更直观、准确地分析其中各个网站在互联网

上的竞争力排名,以此了解用户对某些类型网站的喜好程度。

二、实验项目

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

三、实验操作步骤

(一)观察网页

首先通过浏览器进入“行业网站”——站长之家,查看网页的基本结构,通过改变网页得出为静态网页的结论,以下为网站名称及网址:

行业网站 - 行业网站排名 - 网站排行榜 (chinaz.com)

https://top.chinaz.com/hangye

 

在这里插入图片描述

以上图片中画圈部分为本次爬虫需要爬取信息。

进入网站源代码界面,查看我们所需要爬取内容的相关代码以及网络请求情况。
在这里插入图片描述

右键点击网页出现审查界面如下:
在这里插入图片描述

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

(二)请求数据

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

成功。
在这里插入图片描述

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

行调整赋值。
在这里插入图片描述

导入第三方数据库

Python学习交流Q群:903971231####
#导入库
import requests   #requests库请求网页
from lxml import etree #进行文件格式解析
import pandas as pd  #pandas库保存索引信息
设置headers与请求链接

```python
#设置请求头
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"}

```python
#requests请求链接
rq = requests.get(url,headers=headers).text

 

 

(三)解析数据

使用lxml模块中的etree方法将字符串转化为html标签,再使用xpath方法获取多行信息。

我们观察到,需要的网站信息存储在class='listCentent’的ul标签下,该标签在html标签下的body标签下第四个div标签下的第三个

div标签下的第二个div标签下。
在这里插入图片描述

其Xpath绝对路径如下:

/html/body/div[4]/div[3]/div[2]/ul

 

我们有个更简便的方法可以获得其绝对路径:右键点击Copy-Copy full Xpath,即可获得该标签Xpath的绝对路径。
在这里插入图片描述

站长之家的各网站信息都存储在上述ul标签下的li标签下。
在这里插入图片描述

我们可以获取各网站信息存储的li标签的list。

li_list = html.xpath("/html/body/div[4]/div[3]/div[2]/ul/li")

 

我们想获取网站名称、网址、Alexa周排名、反链数等信息,发现其在li标签的下级标签中
在这里插入图片描述

python学习交流Q群:903971231####
#使用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]

 

(四)储存数据

上述步骤中,我们已经将import pandas as pd输入,随后通过pandas的to_csv将数据存入csv中,将数据导出为csv文档。

#pandas中的模块将数据存入
df = pd.DataFrame({
"网站名称" : sitename_oyr,
"网址" : websites_oyr,
"Alexa周排名" : Alexa_oyr,
"反链数" : Antichain_oyr,
})

#储存为csv文件
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次。
在这里插入图片描述

运行代码:

for a in range(15):
    #爬取网站的网址并且循环爬取前15页的内容
    url = "https://top.chinaz.com/hangye/index_shenghuo_fenlei_{}.html".format(a*15)

 

(六)全套代码及运行结果

全部代码:

#导入库
import requests
from lxml import etree
import 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中的模块将数据存入
df = pd.DataFrame({
"网站名称" : sitename_oyr,
"网址" : websites_oyr,
"Alexa周排名" : Alexa_oyr,
"反链数" : Antichain_oyr,
})

#储存为csv文件
df.to_csv("paiming.csv" , encoding='utf_8_sig', index=False)

 

编译器获取结果:

获取文档:
在这里插入图片描述

最后

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取站长之家网页信息(附详细源码) - Python技术站

(0)
上一篇 2023年4月2日 下午5:26
下一篇 2023年4月2日

相关文章

  • Python 实现校园网自动登录

    背景 我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。 但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。 这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑) 这个时候可以用python脚本解…

    Python开发 2023年4月2日
    00
  • Python迭代对象、迭代器与生成器

    关系图 1.可迭代对象(iterable) 一个具备__iter__()方法的对象,就是一个可迭代对象,但是要成为一个正常的可迭代对象那么就需要遵循协议。这个方法必须返 回一个迭代器。 可迭代协议: 含__iter__()方法。且可迭代对象中的__iter__()方法返回的是一个对应的迭代器。(如list对应的迭代器就是 list_iterator) 以下代…

    Python开发 2023年4月2日
    00
  • Python实战项目7个有趣的小游戏

    每天都会分享几个有趣的Python小知识,现在给大家分享几个适合新手练习的小项目,好玩不烧脑,提升技能不在话下。等会就叫你的室友跟你一起VS,轻轻松松成为卷王。 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。 2、确实没重复造轮子,但是在重复制造汽车。包括好多大神写的…

    Python开发 2023年4月2日
    00
  • 初学者必犯的10个Python错误

    前言 当我们开始学习Python时,我们会养成一些不良编码习惯,而更可怕的是我们连自己也不知道。 我们学习变成的过程中,大概有会这样的经历: 写的代码只能完成了一次工作,但后来再执行就会报错或者失败,令人感到懊恼, 或者偶然发现一个内置函数可以让你的工作更轻松时,瞬间豁然开朗。 我们中的大多数人仍然有很多使用Python的坏习惯,这些习惯在我们学习pytho…

    Python开发 2023年4月2日
    00
  • 70 行 Python 代码写春联,行书隶书楷书随你选

    前言 相信现在有很多小伙伴都不会写毛笔字了,今天想用python来写一幅春联,不知道有没有人喜欢。该文用的是田英章老师的楷 书,我在网上总共找到了1600个汉字,因此,春联用字被限制在这1600个汉字的小字库中。我个人精力有限,同时受知识产权保 护的限制,不可能制作完整的毛笔字库。那么,能否借用现有的矢量字库,满足朋友们的要求呢?经过一番尝试,发现操作系统 …

    Python开发 2023年4月2日
    00
  • Python超好用的命令行界面实现工具,我保证你肯定不知道…

    前言 Click 是一个简洁好用的Python模块,它能用尽量少的代码实现漂亮的命令行界面。它不仅开箱即用、还能支持高度自定义的配 置。 官方文档:https://click.palletsprojects.com/en/8.0.x/   一个简单的示例如下: import click PYTHON插件/素材/源码加Q群:903971231#### @cli…

    Python开发 2023年4月2日
    00
  • Python图片压缩处理

    前言 不知道有没有人跟我有一样的烦恼,有时候图片太大了占内存很烦,本来手机内存也就那么点,放一个图片稍微大一点的,都不 能放一个成百上千张,这不是很烦嘛。于是,这又让我来灵感了,既然图片给了我难题,那么我就来接受这样的挑战。所以,我 决定用python来试试可不可以压缩图片,不是不知道,一试就成功了,那么好的东西怎么能一个人独享呢,当然要分享出来给大 家呀~…

    Python开发 2023年4月2日
    00
  • 5 个方便好用的 Python 自动化脚本,拿来就用

    前言 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作 效率。 编程世界里有各种各样的自动化脚本,来完成不同的任务。 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库。 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中。 1、自动化阅读网页…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部