【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜
运行效果图:



import requests
from lxml import etree url_ = "http://www.xiami.com/chart"
page_source = requests.get(url=url_)
print("响应结果:\n",page_source.text)
model = etree.HTML(page_source.text)

import requests from lxml import etree url_ = "http://www.xiami.com/chart" headers_ = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87' } page_source = requests.get(url=url_,headers=headers_) print("响应结果:\n",page_source.text) model = etree.HTML(page_source.text)







import requests
from lxml import etree url_ = "http://www.xiami.com/chart/data?c=103&type=0&page=1&limit=100&_=1517477892257" headers_ = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87' }
page_source = requests.get(url=url_,headers=headers_) print("响应结果:\n",page_source.text) model = etree.HTML(page_source.text)


<div class="info">
<p>
<strong>
<a>歌曲名等信息 在第一个p标签里面</a>
</strong>
</p>
<p>
...
...
</p>
</div>

我们发现这句XPath选择是可以把当前页面所有的歌曲名称选择出来的,然后就是再选择歌曲对应的歌手,我们再看一下歌手标签所在的DOM结构:

<div class="info">
<p>
...
...
</p>
<p>
<a>歌手名称,在第二个p标签里面</a>
</p>


从中发现,一首歌曲可能有多位演唱者,每一位演唱者占用一个<a>标签,且用“;”分隔,如下:


import requests
from lxml import etree url_ = "http://www.xiami.com/chart/data?c=103&type=0&page=1&limit=100&_=1517477892257" headers_ = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87'
} page_source = requests.get(url=url_, headers=headers_)
print("响应结果:\n", page_source.text)
model = etree.HTML(page_source.text)
songs_list = model.xpath('//div[@class="info"]/p[1]/strong/a/text()') songer = model.xpath("//div[@class='info']/p[2]")
print("歌曲个数:{} 歌手个数:{}".format(len(songs_list),len(songer)))

import requests
from lxml import etree
url_ = "http://www.xiami.com/chart/data?c=103&type=0&page=1&limit=100&_=1517477892257" headers_ = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87'
}
page_source = requests.get(url=url_, headers=headers_) print("响应结果:\n", page_source.text) model = etree.HTML(page_source.text)
songs_list = model.xpath('//div[@class="info"]/p[1]/strong/a/text()')
songer = model.xpath("//div[@class='info']/p[2]")
print("歌曲个数:{} 歌手个数:{}".format(len(songs_list), len(songer)))
for index, item in enumerate(songs_list):
# 继续处理一首歌曲有多位演唱者的情况,因为每一位演唱者都在一个a标签里面,我们把多个a标签看成一个list集合处理
songer_list = songer[index].xpath(".//a/text()")
# 每一首歌曲的每一位演唱者组成一个list集合,我们利用join方法对list集合的每一项进行拼接,组成一个字符串结果
dealed_songer = ",".join(songer_list)
# 最后按格式输出结果
print("{}、{}\t【{}】".format(index + 1, item, dealed_songer))

至此,本教程结束,通过本教程,你清晰的看到了这个简单数据爬取是怎么一步一步完成的,见证了从需求明确、问题原因分析、问题解决、代码完善、最终完成的整个生命周期,那么此时你也就对爬虫编写基本思路有了一个简单的认识,爬取数据的代码都不会太复杂,复杂就复杂在发现问题、解决问题方式的寻找中,好的爬虫在于数据价值、涵盖范围以及相关算法确定中。当然了,本教程爬取的数据没多大价值,仅仅是抛砖引玉而已,希望各位灵活运用。
【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜的更多相关文章
- 采用EaglePHP框架解决分布式集群服务器利用MEMCACHE方式共享SESSION数据的问题
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网 站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录 ...
- 多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...
- Python爬虫实践~BeautifulSoup+urllib+Flask实现静态网页的爬取
爬取的网站类型: 论坛类网站类型 涉及主要的第三方模块: BeautifulSoup:解析.遍历页面 urllib:处理URL请求 Flask:简易的WEB框架 介绍: 本次主要使用urllib获取网 ...
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
文件组的基本知识点介绍完毕后,根据场景引入中的内容,我们将利用SQL Server文件组技术来实现冷热数据隔离备份的方案设计介绍如下. 设计分析 由于payment数据库过大,超过10TB,单次全量备 ...
- python利用xmlrpc方式对odoo数据表进行增删改查操作
# -*- encoding: utf-8 -*- import xmlrpclib #导入xmlrpc库,这个库是python的标准库. username ='admin' #用户登录名 pwd = ...
- 分批次从musql取数据,每次取1000条
$t = new Gettags(); $num=$t->sum_tag(); $num=$num/1000; $flag_num=ceil($num); $flag_array=array() ...
- 使用google chrome抓取数据:抓取全国的高中的数据
http://tomycat.github.io/blog/other/2014/05/28/use-google-chrome-capture-data.html
- .NET抓取数据范例 抓取页面上所有的链接
原文发布时间为:2009-11-15 -- 来源于本人的百度文章 [由搬家工具导入] .NET抓取数据范例 抓取页面上所有的链接 前台: <%@ Page Language="C#&q ...
- R中使用rvest爬取数据小试
总结R中使用 xpath 和 css selectors 获取标签内容(xpath功能强大,而CSS选择器通常语法比较简洁,运行速度更快些) 例:抓取下面标签的内容: <h3 class=&qu ...
随机推荐
- 用烂点子打破沉默的"麦当劳理论"
"麦当劳"理论是啥? 讨论周末聚餐去哪儿的时候,朋友们往往太过顾及彼此的想法,犹豫着等待其他人做决定. 当谁也不愿说出提议的时候, 我往往会耍一个花招:推荐去麦当劳吃. 宝贵的休息 ...
- innodb 表锁和行锁
表锁 表锁相关结构: table->locks:数据字典table保存这个表上的所有表锁信息 trx->lock.table_locks:每个事务trx保存该事务所加的所有表锁信息 tr ...
- SQL Server 中为何拥有db_owner权限的账号删除不掉数据库
今天在公司的SQL Server服务器上,使用了一个只有public和dbcreator角色的账号"user1"在SMSS中去删除一个数据库,但是死活报错说没有权限,报错如下: D ...
- Sql server 账号被锁住:"the account is currently locked out. The system administrator can unlock it."的解决办法(转载)
今天遇到的问题比较有意思.首先是很久没有打开测试数据库了,今天打开,使用service程序测试的时候出现下面的错误提示:Message: System.Data.SqlClient.SqlExcept ...
- grep 匹配制表符 和 换行符
使用: [root@dhcp-- ~]# grep $'\n' log.txt [root@dhcp-- ~]# grep $'\t' log.txt 这两个命令 [root@dhcp-- ~]# l ...
- C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框
诚意满满直接上代码: static void Main(string[] args) { //Main函数中增加此句 AppDomain.CurrentDomain.UnhandledExceptio ...
- Win10更新后真正可用VC++6版本
1.首先,我并不支持继续用VC6,毕竟太老太老了...除了VS,如果只是学C,那你完全可以用其它一些工具...当然除非你也是像我一样被逼无奈. 2.本次找了N多个版本,问题就是Win10周年更新包后, ...
- eclipse能正常启动tomcat,但是网页访问不了
参考网址https://blog.csdn.net/did_itmyway/article/details/62099930
- JAVA引用的种类
最近在进行Java项目开发的时候,由于业务的原因,有时候new的对象会比较多,这个时候我总是有一个疑惑?那就是JVM在何时决定回收一个Java对象所占据的内存?这个问题其实对整个web系统来说是一个比 ...
- Oracle修改表空间为自动扩展
https://gqsunrise.iteye.com/blog/2015692 1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别 ...