手把手教你用用Python爬取上道网的赞助公司名称

一、前言

上道网是一个手游发行推荐与投融资交易平台。平台聚集手游CP、手游发行、手游渠道、手游外包,投资商以及IP授权商,IP合作、一站式服务。并为之提供合作交易机会。

今天教如何去爬取上道网的赞助公司名称,方便有关人士投资。

二、实现目标

获取对应的公司名称,保存文档。

三、项目准备

软件:PyCharm

需要的库:requests,fake_useragent,time

网址:
http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-{}.html

四、项目分析

如何网页访问?

http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-1.html

http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-2.html

http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-3.html

http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-4.html

点击下一页时,每增加一页p-{}.html自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

五、项目实现

1. 定义一个class类继承object,定义init方法继承self,主函数main继承self。导入需要的库、请求地址。

import requests
from lxml import etree
from fake_useragent import UserAgent
import time


class Shangdao(object):
    def __init__(self):
        self.url = "http://www.daogame.cn/qudao-p-2.html?s=/qudao-p-{}.html"  #网站
    def main(self):
        pass


if __name__ == '__main__':
    Siper = Shangdao()
    Siper.main()

2. 随机产生UserAgent,防止反爬。

for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

3. 发送请求 获取响应, 页面回调,方便下次请求。

   def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4. 获取公司名称,for遍历。

   def page_page(self, html):
        parse_html = etree.HTML(html)
        one = parse_html.xpath('//h2/a/text()')
        for i in one:
            print(i)

5. 写入文档。

           f = open('公司.doc', 'a', encoding='utf-8')  # 以'w'方式打开文件
            f.write(str(i))

6. 调用方法,实现功能。

   def main(self):
        stat = int(input("输 入 开 始 (2开始):"))
        end = int(input("输 入 结 束:"))
        for page in range(stat, end + 1):
            url = self.url.format(page)
            print(url)
            html = self.get_page(url)
            self.page_page(html)
            print("==================第%s页爬取成功!!!!=====================" % page)

项目优化:

1. 设置时间延时。

time.sleep(1.4)

六、效果展示

点击绿色小三角运行输入起始页,终止页( 从0页开始 )。

渠道公司名,结果显示控制台。

保存文档。

七、总结

  1. 不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

  1. 希望通过这个项目,能够帮助了解xpath解析页面的基本流程,字符串是如何拼接,format函数如何运用。

  2. 本文基于Python网络爬虫,利用爬虫库,实现爬取上道网,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

    看完本文有收获?请转发分享给更多的人

    IT共享之家

    入群请在微信后台回复【入群】

    ——————- End ——————-

    往期精彩文章推荐:

Python解析库lxml与xpath用法总结

本文主要围绕以xpath和lxml库进行展开:

一、xpath 概念、xpath节点、xpath语法、xpath轴、xpath运算符

二、lxml的安装、lxml的使用、lxml案例

一、xpath

1.xpath概念

XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式在 XML 文档中进行导航 。XPath 包含一个标准函数库 。XPath 是 XSLT 中的主要元素 。XPath 是一个 W3C 标准 。

2.xpath节点

xpath有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。

节点关系:父、子、兄弟、先辈、后辈。

3.xpath语法

xpath语法在W3c网站上有详细的介绍,这里截取部分知识,供大家学习。

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。下面列出了最有用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用”|”运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

4.xpath 轴

轴可定义相对于当前节点的节点集。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。

5.xpath运算符

下面列出了可用在 XPath 表达式中的运算符:

运算符 描述 实例 返回值
| 计算两个节点集 //book | //cd 返回所有拥有 book 和 cd 元素的节点集
+ 加法 6 + 4 10
减法 6 – 4 2
* 乘法 6 * 4 24
div 除法 8 div 4 2
= 等于 price=9.80 如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
!= 不等于 price!=9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
< 小于 price<9.80 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<= 小于或等于 price<=9.80 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
> 大于 price>9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>= 大于或等于 price>=9.80 如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
or price=9.80 or price=9.70 如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
and price>9.00 and price<9.90 如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod 计算除法的余数 5 mod 2 1

好了,xpath的内容就这么多了。接下来我们要介绍一个神器lxml,他的速度很快,曾经一直是我使用beautifulsoup时最钟爱的解析器,没有之一,因为他的速度的确比其他的html.parser 和html5lib快了许多。

二、lxml

1.lxml安装

lxml 是一个xpath格式解析模块,安装很方便,直接pip install lxml 或者easy_install lxml即可。

2.lxml 使用

lxml提供了两种解析网页的方式,一种是你解析自己写的离线网页时,另一种 则是解析线上网页。

导入包:

from lxml import  etree

1.解析离线网页:

html=etree.parse('xx.html',etree.HTMLParser())
aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h2/a[1]/@href')
print(aa)

2.解析在线网页:

from lxml import etree
import requests
rep=requests.get('https://www.baidu.com')
html=etree.HTML(rep.text)
aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h2/a[1]/@href')
print(aa)

那么我们怎么获取这些标签和标签对应的属性值了,很简单,首先获取标签只需你这样做:


然后我们可以,比方说,你要获取a标签内的文本和它的属性href所对应的值,有两种方法,

1.表达式内获取

aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h2/a[1]/text()')


ab=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h2/a[1]/@href')

2.表达式外获取

aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h2/a[1]')


aa.text


aa.attrib.get('href')

这样就完成了获取,怎么样,是不是很简单了,哈哈哈。

下面再来lxml的解析规则:

表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
html = lxml.etree.HTML(text)
#使用text构造一个XPath解析对象,etree模块可以自动修正HTML文本
html = lxml.etree.parse('./ex.html',etree.HTMLParser())
#直接读取文本进行解析
from lxml import etree
result = html.xpath('//*')
#选取所有节点
result = html.xpath('//li')
#获取所有li节点
result = html.xpath('//li/a')
#获取所有li节点的直接a子节点
result = html.xpath('//li//a')
#获取所有li节点的所有a子孙节点
result = html.xpath('//a[@href="link.html"]/../@class')
#获取所有href属性为link.html的a节点的父节点的class属性
result = html.xpath('//li[@class="ni"]')
#获取所有class属性为ni的li节点
result = html.xpath('//li/text()')
#获取所有li节点的文本
result = html.xpath('//li/a/@href')
#获取所有li节点的a节点的href属性
result = html.xpath('//li[contains(@class,"li")]/a/text())
#当li的class属性有多个值时,需用contains函数完成匹配
result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
#多属性匹配
result = html.xpath('//li[1]/a/text()')
result = html.xpath('//li[last()]/a/text()')
result = html.xpath('//li[position()<3]/a/text()')
result = html.xpath('//li[last()-2]/a/text()')
#按序选择,中括号内为XPath提供的函数
result = html.xpath('//li[1]/ancestor::*')
#获取祖先节点
result = html.xpath('//li[1]/ancestor::div')
result = html.xpath('//li[1]/attribute::*')
#获取属性值
result = html.xpath('//li[1]/child::a[@href="link1.html"]')
#获取直接子节点
result = html.xpath('//li[1]/descendant::span')
#获取所有子孙节点
result = html.xpath('//li[1]/following::*[2]')
#获取当前节点之后的所有节点的第二个
result = html.xpath('//li[1]/following-sibling::*')
#获取后续所有同级节点

3.lxml案例

为了偷懒,小编决定还是采用urllib那篇文章的代码,哈哈哈,机智如我。

好了,今天就讲这么多,大家感兴趣的话可以多多关注哦,精彩不停息!!!!

本文参考文献:

https://www.w3school.com.cn/

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐:

一篇文章教会你使用Python下载抖音无水印视频

今天小编要跟大家分享的是,利用Python如何下载抖音无水印的视频;大家可能要问了,这个有什么用呢?当然有用了。那么有什么用呢?下面小编跟大家详细说说。

众所周知,由于如今短视频的火爆,使得一批又一批的自媒体创作者犹如雨后春笋般冒了出来,其中不乏一些创作者投机取巧想要剽窃他人成功作品,这一行为往往被戏称为白嫖,哈哈哈,废话不多说,撸起袖子就是淦。

一、准备

sublime text 3、360浏览器、Python 3.6运行环境

二、需求分析

首先,我们要弄清楚一件事情,抖音视频的水印是怎么生成上去的,什么时候生成上去的,搞清楚这件事情就能很容易找到原视频的地址,然后就可以直接下载了。

三、操作实践

我们打开手机上的一个抖音视频,然后点击复制链接,把链接复制下来然后到电脑浏览器打开,比如说关于李元霸的这个抖音视频:

多少英雄豪杰被黑,只为神化一个痴呆患者李元霸 https://v.douyin.com/wCgKrh/ 复制此链接,打开【抖音短视频】,直接观看视频!

复制链接在浏览器打开,即可看到这幅画面,如下图:

一篇文章教会你使用Python下载抖音无水印视频

然后我们会发现视频带有抖音字样的水印,很显然这不便于我们白嫖别人的优秀作品,打开审查元素进行查看,如下图:

一篇文章教会你使用Python下载抖音无水印视频

为了程序的美观,我们可以写个GUI界面的:

class page:
    def __init__(self): 
        self.root= tk.Tk()   #初始化窗口
        self.root.title('抖音无水印视频下载v1.0')  #窗口名称
        self.root.geometry("700x700")  #设置窗口大小
        #设置窗口是否可变,宽不可变,高可变,默认为True
        self.root.resizable(width=True,height=True)
        #创建标签,文字,背景颜色,字体(颜色,大小),标签的高和宽
        self.label1 =tk.Label(self.root,text='抖音地址:',font=('宋体',10),width=12,height=2)
        #创建输入框,标签高度,字体大小颜色,内容显示方式
        self.e1 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12))
        self.label2 =tk.Label(self.root,text='文件名:',font=('宋体',10),width=12,height=2)
        #创建输入框,标签高度,字体大小颜色,内容显示方式
        self.e2 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12))
        #创建按钮 内容  宽高  按钮绑定事件
        self.b1 = tk.Button(self.root, text='无水印下载', width=8,height=1,command=self.download)
        self.b2 = tk.Button(self.root, text='清空内容', width=8,height=1,command=self.close)
        self.photo=tk.PhotoImage(file = '111.gif')
        self.im=tk.Label(self.root, image = self.photo)
        self.photo1=tk.PhotoImage(file = '222.gif')
        self.im1=tk.Label(self.root, image = self.photo1)
        self.dashang=tk.Label(self.root,bg='gray',fg='blue',font=('宋体',12),text='感谢各位的支持,觉得小弟写的不错欢迎打赏,以便于我日后分享更多的精彩作品')
        #将所有部件添加到界面中
        self.label1.place(x=140,y=30,anchor='nw')
        self.e1.place(x=210,y=32,anchor='nw')
        self.b2.place(x=500,y=40,anchor='nw')
        self.label2.place(x=144,y=60,anchor='nw')
        self.e2.place(x=210,y=62,anchor='nw')
        self.b1.place(x=230,y=110,anchor='nw')
        self.dashang.place(x=60,y=160)
        self.im.place(x=10,y=200,width=202,height=313,anchor='nw')
        self.im1.place(x=300,y=200,width=202,height=313,anchor='nw')
        self.b3=tk.Button(self.root,text='技术博客,点我直达',command=self.refer)
        self.b3.place(x=200,y=530,width=140,height=40,anchor='nw')
        self.root.mainloop()

效果还不错,可以看看:

一篇文章教会你使用Python下载抖音无水印视频

接下来我们要写的是下载实现代码段,如下:

def download(self):
        url='http://www.zimo.wiki:8080/douyin-video-crawler/api/analysis?url='+self.e1.get()
        try:
            rep=requests.get(url,timeout=5)
            result=rep.text
            res=eval(result)
            if res.get('msg')=='analysis success':
                down_url=res.get('url')
                data=requests.get(down_url,stream=True,timeout=4)
                with open('{}.mp4'.format(self.e2.get()),'wb') as f:
                    f.write(data.content)
            else:
                msg.showwarning('notice','URL Format Error!!!')
        except:
            return

这里我们是用到了一个抖音解析接口:

http://www.zimo.wiki:8080/douyin-video-crawler/api/analysis?url=

只要在它后面加上抖音视频URL,即可解析出无水印视频,是不是很强大?

我们将地址填写进去访问,发现是这样,如图:

一篇文章教会你使用Python下载抖音无水印视频

我们把红线指示的地址复制到地址栏就可以访问到无水印视频啦!

拿到真实地址便可以下载了。

为了让他的功能更加完善,我们再加上关闭和跳转操作,如图:

def close(self):  #关闭
        self.e1.delete(0,'end')
        self.e2.delete(0,'end')
        
 def refer(self): #跳转
        wb.open('https://url.ms/lypks')

最后当然就是启动该程序啦。

page()

得到如下播放画面:

一篇文章教会你使用Python下载抖音无水印视频

可以看到,完全没有水印。

四、总结

本文介绍的技术虽然算不上太高端和前沿,但是挺实用的。感谢大家的多多关注与支持,后期我会出更多实用的代码技巧。

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐:

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

【一、项目简介】

本文主要目标是采集淘宝的评价,找出客户所需要的功能。统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等。

 

【二、项目准备工作】

1. 准备Pycharm,下载安装等,可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

2. 爬取商品地址,如下所示:

https://detail.tmall.com/item.htm?spm=a230r.1.14.1.55a84b1721XG00&id=552918017887&ns=1&abbucket=17

3. 需要下载几个库,如何下载呢?

打开pycharm软件点击File在点击setting选项,再选择Project:你的文件名下边的Project:Interpreter选项。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

点击+号,安装这个项目需要用的库,例如:requests、beautifulsoup4、simplejson。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

 

【三、项目实现】

1. 导入需要的库

import requests
from bs4 import  BeautifulSoup as bs
import json
import csv
import re

2. 需要登录淘宝网,选择谷歌浏览器选择开发者工具或按F12有个Network选项,查找list_detail_rate.htm?文件

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

定义一个变量存储URL地址PAGE_URL = []

定义一个生成链接列表函数,使用字符串拼接形成评论的页数

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

定义一个获取评论数据函数内定义需要用到的字段例如:用户名、评论时间、颜色分类、评论,如下图所示。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

那个cookie值在在开发者工具Network有个item.htm?spm文件有个cookie复制过来就好了。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

解析JS文件内容、将数据写入TEXT文件中,如下图所示。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

最后定义一个主函数爬取需要的评论页数,如下图所示。

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

最后得到的结果如图所示:

一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

 

【四、总结】

1. 本文基于Python网络爬虫,采集了淘宝商品的评价,方法行之有效。但是建议不要抓取太多,以免对服务器造成压力。

2. 如果需要本文源码,请在公众号后台回复“淘宝评论”获取。

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐:

手把手用Python教你如何发现隐藏wifi

手把手教你用Python做个可视化的“剪刀石头布”小游戏

手把手用Python网络爬虫带你爬取全国著名高校附近酒店评论

一篇文章教会你使用Python网络爬虫下载酷狗音乐

【一、项目背景】

现在的听歌软件动不动就是各种付费,要下载软件才能听,当你下载了之后,你会惊奇的发现这首歌还收费,这就让一向喜欢白嫖的小编感到很伤心了。于是,小编冥思苦想,终于让我发现了其中的奥秘,一起来看看吧。

【二、项目准备】

1、编辑器:Sublime Text 3

2、软件:360浏览器

【三、项目目标】

下载我们喜欢的音乐。

【四、项目实现】

1、打开酷狗音乐官网

360浏览器打开酷狗音乐官网:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

可以看到十分清爽的画风,这也是我比较喜欢的地方。

2、审查元素,分析请求

打开Network ,分析请求,我们可以看到:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

从上图可以看出,这是请求的参数,所以我们可以使用Requests模块对它发起请求。

3、模拟发起请求

我们从网页中得知它的地址为:

https://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord=%E4%B8%8D%E8%B0%93%E4%BE%A0

可以看到真正对于我们来说有用的就只有SearchKeyWord参数后的值,前面的搜索类型默认填写即可,所以我们可以这样:

import requests
headers={'accept': '*/*',
'accept-encoding':'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cookie': 'kg_mid=ebb2de813317a791bcf7b7d3131880c4; UM_distinctid=1722ba8b22632d-07ac0227c507a7-4e4c0f20-1fa400-1722ba8b2284a1; kg_dfid=0Q0BEI47P4zf0mHYzV0SYbou; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1590041687,1590280210,1590367138,1590367386; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1590367431',
'referer': 'https://www.kugou.com/yy/html/search.html',
'sec-fetch-mode': 'no-cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}aa=input('请输入歌名:')
data={
'callback': 'jQuery112408716317197794392_1590368232677',
'keyword':aa,
'page': '1',
'pagesize':'30',
'userid':'-1',
'clientver': '',
'platform': 'WebFilter',
'tag': 'em',
'filter': '2',
'iscorrection': '1',
'privilege_filter': '0',
'_': '1590368232679',
}requests.get('https://www.kugou.com/yy/html/search.html',params=data,timeout=4)

这样就实现了模拟请求,我们来验证下:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

可以看出它成功打印出了和我们上面一模一样的地址。

4、获取音乐文件列表

rep=requests.get('https://www.kugou.com/yy/html/search.html',params=data,timeout=5)
print(rep.url)
res=requests.get(rep.url,timeout=4)
print(res.text)

当我们将请求地址填写正确后,我发现竟然内容与预期不相符,但是请求地址对的一批。

我以为是这样的结果:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

实际上的结果:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

可以看到差距很大,而且用Json也根本获取不到,报格式错误,说明不是一个Json,看来这比QQ音乐难度高点。不过我们今天要下载的是音频文件,所以暂时跳过,不管它。

5、下载音频文件

我们在搜索后弹出来的列表中选择原唱曲目,进去听一下:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

我选择第一首,打开是这样,我们开始骚操作,打开Network:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

我们输入后缀Mp3,然后定位到对应的请求,然后打开它的请求结果,可以看到一个Json结果:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

我们将Json结果粘贴到控制台,可以看到里面有一段关于Mp3的结果,不过添加了点干扰符号,我们把它提取出来:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

这样我们就可以把酷狗音乐的歌曲下载下来了。

【五、项目总结】

1、其实,酷狗音乐与QQ音乐不同,酷狗音乐的下载链接更好捕获,你可以直接在它的播放界面捕获到:

一篇文章教会你使用Python网络爬虫下载酷狗音乐

模拟请求这个界面,一切都搞定了。

2、关于QQ音乐的获取,可以参考之前发布的系列文章:

3、需要本文源码的小伙伴,后台回复“酷狗音乐”四个字,即可获取。

IT共享之家

入群请在微信后台回复【入群】

****看完本文有收获?请转发分享给更多的人****

—————— End ——————

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取分类图片

【一、项目背景】

博海拾贝是一支互联网从业者在线教育的团队,扎根于中国教育行业以及互联网行业的创新和眼球中,打造专业体系化的互联网人在线教育平台。精心创作许多精彩的文章,提供了很多有趣的图片。

今天来教大家如何使用Python来爬取博海拾贝的图片,分类保存,写入文档。

一篇文章教会你利用Python网络爬虫获取分类图片

【二、项目目标】

创建一个文件夹, 分类保存所有文章图片。下载成功,结果显示控制台。

【三、项目分析】

1、如何找到真正访问的地址,多网页请求?

滑动鼠标,观察网站,右键F12 。鼠标滚轮滑动加载新内容。如图:

一篇文章教会你利用Python网络爬虫获取分类图片

点开随机网页 , 点开Request URL ,观察网址的规律。

一篇文章教会你利用Python网络爬虫获取分类图片
https://bh.sb/page/1/
https://bh.sb/page/2/
https://bh.sb/page/3/
https://bh.sb/page/4/

观察到,每增加一页page/{}/自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

2. 反爬处理

1)获取正常的 http请求头,并在requests请求时,设置这些常规的http请求头。

2)使用 fake_useragent ,产生随机的UserAgent进行访问。

【四、涉及的库和网站】

1、网址如下:

https://www.doutula.com/photo/list/?page={}

2、涉及的库:requestslxmlfake_useragenttimeos

3、软件:PyCharm

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。导入需要的库和网址,创建保存文件夹。

import requests, os
from lxml import etree
from fake_useragent import UserAgent
import timeclass bnotiank(object):    def __init__(self):
        os.mkdir("图片")  # 在创建文件夹 记住只有第一次运行加上,如果多次运行请注释掉本行。
    def main(self):
          pass
if __name__ == '__main__':
    Siper=bnotiank()
    Siper.main()

2、随机UserAgent ,构造请求头,防止反爬。

ua = UserAgent(verify_ssl=False)
    for i in range(1, 50):
        self.headers = {            'User-Agent': ua.random
        }

3、发送请求 ,获取响应,页面回调,方便下次请求。

'''发送请求  获取响应'''
    def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)        html = res.content.decode("utf-8")
        return html

4、定义parse_page函数,获取二级页面地址,for遍历获取需要的字段。

 def parse_page(self, html):
        parse_html = etree.HTML(html)        image_src_list = parse_html.xpath('//p/a/@href')
        # print(image_src_list)

5、对二级页面发生请求,xpath解析数据,获取大图片链接。

reo = parse_html1.xpath('//div//div[@class="content"]') #父结点
    for j in reo:
        d = j.xpath('.//article[@class="article-content"]//p/img/@src')[0]
        text = parse_html1.xpath('//h1[@class ="article-title"] //a/text()')[0].strip()

6、请求图片地址,写入文档。

 html2 = requests.get(url=d, headers=self.headers).content
    dirname = "./d/" + text + ".jpg" #定义图命名
    with open(dirname, 'wb') as f:
        f.write(html2)        print("%s 【下载成功!!!!】" % text)

7、调用方法,实现功能。

url = self.url.format(page)
print(url)
html = self.get_page(url)
self.parse_page(html)

8、设置延时。(防止ip被封)。

  time.sleep(1) """时间延时"""

【六、效果展示】

1、点击绿色小三角运行输入起始页,终止页。

一篇文章教会你利用Python网络爬虫获取分类图片

2、将下载成功信息显示在控制台。

一篇文章教会你利用Python网络爬虫获取分类图片

3、text 作为图片命名,展示效果如下所示。

一篇文章教会你利用Python网络爬虫获取分类图片

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文基于Python网络爬虫,讲述了反爬技巧,利用爬虫库,实现了分类图片的获取,存入文档。

3、希望通过这个项目,能够帮助了解xpath,字符串是如何拼接,format函数如何运用。

4、实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“博海拾贝”四个字,即可获取。

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫成为斗图达人

【一、项目背景】

你是否在寻找可以与高手斗图的应用? 你是否在寻找可以自制表情的应用?你是否在寻找最全、最爆笑的表情库?

斗图网是一个收集了成千上万的撕逼斗图表情包,在这里你可以快速找到想要的表情, 更好的“斗图”,助您成为真正的斗图终结者!

一篇文章教会你利用Python网络爬虫成为斗图达人

【二、项目目标】

下载表情包,保存文档。

【三、涉及的库和网站】

1、网址如下:

https://www.doutula.com/photo/list/?page={}

2、涉及的库:requests****、lxml、ssl****、time

3、软件:PyCharm

【四、项目分析】

1、如何找到表情包图片地址?

F12右键检查,找到对应的图片的地址。

一篇文章教会你利用Python网络爬虫成为斗图达人

观察网址的变化(一般取前三页):

https://www.doutula.com/photo/list/?page=1
https://www.doutula.com/photo/list/?page=2
https://www.doutula.com/photo/list/?page=3

发现点击下一页时,page{}每增加一页自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

2. 如何解除ssl验证?

因为这个网址是https,需要导入一个ssl模块,忽略ssl验证。

一篇文章教会你利用Python网络爬虫成为斗图达人

3. ****如何获取Cookie?

右键检查,找到NetWork,随便复制一个Cookie即可。

一篇文章教会你利用Python网络爬虫成为斗图达人

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。导入需要的库。

import requests
from lxml import etree
from fake_useragent import UserAgent
import ssl  # ssl验证import time
ssl._create_default_https_context = ssl._create_unverified_contextclass  Emoticon(object):
    def __init__(self):        pass    def main(self):        passif __name__ == '__main__': 
    spider = Emoticon()    spider.main()

2、导入网址和构造请求头,防止反爬。

 def __init__(self):
        self.headers = {'User-Agent': 'Mozilla/5.0'}
        self.url = 'https://www.doutula.com/photo/list/?page={}'

3、发送请求 ,获取响应,页面回调,方便下次请求。

 def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4、xpath解析页面。

这里我们先获取父节点,在通过for循环遍历,找到对应的子节点(图片地址)。

一篇文章教会你利用Python网络爬虫成为斗图达人
  image = parse_html.xpath('//ul[@class="list-group"]/li/div/div//a')
  for i in image:      image_src_list = i.xpath('.//img/@data-original')[0]
      image_name = i.xpath('.//img//@alt')[0]

运行的结果:

一篇文章教会你利用Python网络爬虫成为斗图达人

5、对图片地址发生请求,取对应图片地址后10位,作为图片的命名,写入文件(每一张图片的后缀名不一样,所有这里不采用image_name作为图片的命名)。

 html2 = requests.get(url=image_src_list, headers=self.headers).content
  name = "/图/" + image_src_list[-20:]
  #print(name[-10:])
  with open(name[-10:], 'wb') as f:
      f.write(html2)      print("%s 【下载成功!!!!】" % image_name)
      print("==================================")

6、调用方法,实现功能。

   html = self.get_page(url)
   self.parse_page(html)
           print("======================第%s页爬取成功!!!!=======================" % page)

7、time模块打出执行时间。

 start = time.time()
  end = time.time()
  print('执行时间:%.2f' % (end - start))

【六、效果展示】

1、点击绿色小三角运行输入起始页,终止页。

一篇文章教会你利用Python网络爬虫成为斗图达人

2、将下载成功信息显示在控制台。

一篇文章教会你利用Python网络爬虫成为斗图达人

3、保存文档,在本地可以看到斗图。

一篇文章教会你利用Python网络爬虫成为斗图达人

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文基于Python网络爬虫,利用爬虫库,获取表情包,存入文档。

3、希望通过这个项目能够了解到,对于HTTPS网站,解除ssl验证的有大致的了解。

4、可以尝试的去爬取其他的分类的表情包,按照步骤去实现,实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“斗图达人”四个字,即可获取。

IT共享之家

入群请在微信后台回复【入群】

****看完本文有收获?请转发分享给更多的人****

—————— End ——————

往期精彩文章推荐:

零基础打造一款属于自己的网页搜索引擎

【前言】

在说这个之前,想必大家应该都比较了解搜索引擎了,它就是通过用户在浏览器输入框中输入文本,从而显示一些结果,你觉得哪项符合你要搜索的内容,你就点击哪项。

【一、项目准备】

浏览器:360浏览器

编辑器:Sublime Text 3

插件:Jquery-3.2.1.Min.Js

【二、项目实现】

由于是要实现一个网页搜索引擎,所以我们需要借用网页三剑客(Html+Css+Javascript),然后实现这一功能。

1.打开百度分析网页结构

我们可以先看看百度的搜索引擎:

可以看到,这个搜索框的部分设置,比如关闭自动完成功能。然后我们在随便搜索内容来查看它的变化:

可以看到某些我们查询的关键字,于是我们便发现了请求规律:

https://www.baidu.com/s?+查询字符参数

这就构成了我们的一个完整的get请求,而且这里面有很多关键字参数可以省略掉,只需要保留重要的一部分就好了。于是,经试验,得出如下结论:

https://www.baidu.com/s?wd=keyword

这个才是请求的接口地址,只需将keyword参数替换为任意搜索关键字即可实现查询并跳转到相应结果页面。

2.编写Html输入框,搜索按钮

看过之前写的Html系列的文章,你将不再对此感到困惑。

<html>
<head>
 <title></title>
 <style type="text/css">
    *{           内外边距初始时为0
       margin:0;    
       padding:0
    }
     input{
        width:300px;
        height:30px
    }
     span{
       position:absolute; 绝对定位
       background-color:red; 背景颜色
       border:1px solid gray; 边框设置
       width:60px;
       height:32px;
       text-align:center 文字位置
    }
    span:hover{ 鼠标悬停时的样式
        background-color:blue
    }
 </style>
</head>
<body>
<input type="text" name="" placeholder="请输入要搜索的内容"> 文本框
<span>search</span> 搜索按钮
</body>
</html>

编写完成后进入浏览器查看,即可看到:

可以看到,已经有点浏览器搜索框的意思了。

3.导入Jquery插件

<script src='jquery-3.2.1.min.js'></script>

4.编写js脚本

这个是重中之重,打开浏览器,network,继续分析:

可以看到搜索结果就在里面。然后打开这个请求的url地址,经过多次实验,发现就只有图中标记的参数有变化:

 

所以我们可以得出结论,我们只需要改变这两个值即可。

1).创建删除脚本

于是我先创建一个脚本标签,不用它的时候随时可以清除,避免占用内存,导致页面打开迟缓,性能降低:

var script=document.createElement('script');  创建script的标签
script.id='jsonp';   设置id为jsonp
script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd;  设置它的地址
document.body.appendChild(script);   添加script元素到body中

然后等它不用了,随时将它删除:

var script=document.createElement('script');  创建script的标签
script.id='jsonp';   设置id为jsonp
script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd;  设置它的地址
document.body.appendChild(script);   添加script元素到body中

2).生成选项下拉菜单

我们在浏览器可以看到,只要一输入文本,它就会弹出对应的选项让我们选择,那么这是如何办到的了?

<script>
function getlist(wd){    /*获取下拉列表*/
   var script=document.createElement('script');  /*创建script的标签*/
   script.id='jsonp';   /*设置id为jsonp*/
   script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd; /* 设置它的地址*/
   document.body.appendChild(script);   /*添加script元素到body中*/
}
function getData(data){  /*获取数据*/
     var script=document.querySelector('#jsonp'); /*选择id为jsonp的元素*/
     script.parentNode.removeChild(script);  /*从这个元素的父元素中删除这个元素*/
     $('ol').html('');  /* 设置有序列表的值为空*/
     var da=data.g;   /* 获取搜索的结果*/
  if(da){                     /*结果存在的话就将结果放到li标签中*/
   da.forEach(function(item,index){  
     $('<li><a target="_blank" href ="https://www.baidu.com/s?wd='+item.q+'">'+item.q+'</a></li>').appendTo('ol');
    })
    }
}


     /* 判断键盘是否按下*/
   $('input:text').keyup(function(){
      var wd=$(this).val();  /* 输入框的值*/
      if(wd==''){           /*如果值是空,那么就隐藏,否则显示*/
          $('ol').css('display','none');
          $('ol').css('zIndex',-10);  
      }else{
          $('ol').css('display','block');
       $('ol').css('zIndex',20);
      }
         getlist(wd);
  });
   </script>

可以看到,搜索结果已经出来了,而且有序列表下的”li”标签也都对应的生成了。

3).给选项标记序列

我们可以看到,结果终于出来,但是我想给它个序列号,这样就可以知道搜索结果有多少个了。要设置的标记方式有很多种,可以以数字开头,也可以是大小写字母或者罗马时间。在这里我选择数字,很简单。

终于非常完美的实现了这一功能,是不是很惊艳了,赶快去试下吧。

4).搜索刷新

看到这里相信大家应该都知道这个功能已经算是完成了,我们只需要随便点击哪个li标签都可以访问到相应的页面。于是,我决定添加一个刷新的功能,属于重连服务器的那种刷新:

<span onclick='window.location.reload()'>search</span> 点击后立即刷新

【三、项目总结】

总的来说,对于初学者小白是个很不错的练手项目,希望大家能从中有所收获。

需要源码的小伙伴,后台回复“搜索引擎”四个字即可获取。

——————- End ——————-
看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

一篇文章教会你利用Python网络爬虫实现豆瓣电影采集

【一、项目背景】

豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务。可以记录想看、在看和看过的电影电视剧 、顺便打分、写影评。极大地方便了人们的生活。

今天以电视剧(美剧)为例,批量爬取对应的电影,写入csv文档 。用户可以通过评分,更好的选择自己想要的电影。

 

【二、项目目标】

获取对应的电影名称,评分,详情链接,下载 电影的图片,保存文档。

 

【三、涉及的库和网站】

1、网址如下:

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}

2、涉及的库:requests****、fake_useragent、json****、csv

3、软件:PyCharm

 

【四、项目分析】

1、如何多网页请求?

点击下一页时,每增加一页paged自增加20,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

2、如何获取真正请求的地址?

请求数据时,发现页面上并没有对应数据。其实豆瓣网采用javascript动态加载内容,防止采集。

1)F12右键检查,找到Network,左边菜单Name , 找到第五个数据,点击Preview。

2)点开subjects,可以看到 title 就是对应电影名称。rate就是对应评分。通过js解析subjects字典,找到需要的字段。

  1. 如何网页访问?
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60

当点击下一页时,每增加一页page自增加20,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

 

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。导入需要的库和请求网址。

import requests,json
from fake_useragent import UserAgent
import csv

class  Doban(object):
    def __init__(self):
      self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"

    def main(self):
        pass

if __name__ == '__main__':
    Siper = Doban()
    Siper.main()

2、随机产生UserAgent,构造请求头,防止反爬。

for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

3、发送请求 ,获取响应,页面回调,方便下次请求。

    def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4、json解析页面数据,获取对应的字典。

   data = json.loads(html)['subjects']
    # print(data[0])

5、for遍历,获取对应的电影名、 评分、下详情页链接。

      print(name, goblin_herf)
      html2 = self.get_page(goblin_herf)  # 第二个发生请求
      parse_html2 = etree.HTML(html2)
      r = parse_html2.xpath('//div[@class="entry"]/p/text()')

6、创建csv文件进行写入,定义对应的标题头内容,保存数据 。

    # 创建csv文件进行写入
    csv_file = open('scr.csv', 'a', encoding='gbk')
    csv_writer = csv.writer(csv_file)
    # 写入csv标题头内容
    csv_writerr.writerow(['电影', '评分', "详情页"])
    #写入数据
    csv_writer.writerow([id, rate, urll])

7、图片地址进行请求。定义图片名称,保存文档。

    html2 = requests.get(url=urll, headers=self.headers).content
    dirname = "./图/" + id + ".jpg"
    with open(dirname, 'wb') as f:
        f.write(html2)
        print("%s 【下载成功!!!!】" % id)

8、调用方法,实现功能。

   html = self.get_page(url)
   self.parse_page(html)

9、项目优化:

1)设置时间延时。

 time.sleep(1.4)

2)定义一个变量u, for遍历,表示爬取的是第几页。(更清晰可观)。

 u = 0
 self.u += 1;

 

【六、效果展示】

1、点击绿色小三角运行输入起始页,终止页( 从0页开始 )。

2、将下载成功信息显示在控制台。

3、保存csv文档。

4、电影图片展示。

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文章就Python爬取豆瓣网,在应用中出现的难点和重点,以及如何防止反爬,做出了相对于的解决方案。

3、希望通过这个项目,能够帮助了解json解析页面的基本流程,字符串是如何拼接,format函数如何运用。

4、本文基于Python网络爬虫,利用爬虫库,实现豆瓣电影及其图片的获取。实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“豆瓣电影”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————-

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取穷游攻略

【一、项目背景】

穷游网提供原创实用的出境游旅行指南、攻略,旅行社区和问答交流平台,以及智能的旅行规划解决方案,同时提供签证、保险、机票、酒店预订、租车等在线增值服务。穷游“鼓励和帮助中国旅行者以自己的视角和方式体验世界”。

今天教大家获取穷游网的城市信息,使用Python将数据写入csv文档。

一篇文章教会你利用Python网络爬虫获取穷游攻略

 

【二、项目目标】

实现将获取对应的城市、图片链接、热点、批量下载 保存csv文档。

 

【三、涉及的库和网站】

1、网址如下:

https://place.qyer.com/south-korea/citylist-0-0-{}

2、涉及的库:requestsl****xml、fake_useragent、time、csv

 

【四、项目分析】

首先需要解决如何对下一页的网址进行请求的问题。可以点击下一页的按钮,观察到网站的变化分别如下所示:

https://place.qyer.com/south-korea/citylist-0-0-1
https://place.qyer.com/south-korea/citylist-0-0-2
https://place.qyer.com/south-korea/citylist-0-0-3

观察到只有citylist-0-0-{}/变化,变化的部分用{}代替,再用for循环遍历这网址,实现多个网址请求。

 

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。准备url地址。

import requests,os
from lxml import etree
import randomimport timefrom fake_useragent import UserAgent
class Travel(object):    def __init__(self):
        self.url = "https://place.qyer.com/south-korea/citylist-0-0-{}/"
    def main(self):
        passif __name__ == '__main__':
    spider= Travel()    spider.main()

2、随机产生UserAgent。

      self.film_list = []
      ua = UserAgent(verify_ssl=False)
        for i in range(1, 50):
            self.film_list.append(ua.chrome)
            self.Hostreferer = {
            'User-Agent': random.choice(self.film_list)
        }

3、多页请求。

        startPage = int(input("起始页:"))
        endPage = int(input("终止页:"))
        for page in range(startPage, endPage + 1):
            url = self.url.format(page)

4、定义get_page方法,进行数据请求。

  '''数据请求'''
    def get_page(self, url):
        html = requests.get(url=url, headers=self.Hostreferer).content.decode("utf-8")
        self.page_page(html)        # print(html)//网页
        # print(self.headers)//构造头

5、定义page_page,xpath解析数据, for循环遍历数组。

在谷歌浏览器上,右键选择开发者工具或者按F12。右键检查,xpath找到对应信息的字段。如下图所示。

一篇文章教会你利用Python网络爬虫获取穷游攻略
   parse_html = etree.HTML(html)
    image_src_list = parse_html.xpath('//ul[@class="plcCitylist"]/li') 
    for i in image_src_list:            b = i.xpath('.//h3//a/text()')[0].strip()
            c = i.xpath('.//p[@class="beento"]//text()')[0].strip()
            d = i.xpath('.//p[@class="pics"]//img//@src')[0].strip()

6、定义csv文件保存数据,写入文档。

       # 创建csv文件进行写入
        csv_file = open('scrape.csv', 'a', encoding='gbk')
        csv_writer = csv.writer(csv_file)        csv_writer.writerow([b, c, d])        csv_file.close()

7、在main方法调用。

   def main(self):
        for i1 in range(1, 25):
            url = self.url.format(i1)
            # print(url)
            html = self.get_page(url)
            time.sleep(2)
            print("第%d页" % i1)

8、time模块,设置时间延迟。

           time.sleep(2)

 

【六、效果展示】

1、点击运行,输入起始页,终止页。

一篇文章教会你利用Python网络爬虫获取穷游攻略

2、将下载成功信息显示在控制台。

一篇文章教会你利用Python网络爬虫获取穷游攻略

3、保存csv文档。

一篇文章教会你利用Python网络爬虫获取穷游攻略

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、希望通过这个项目,能够帮助大家对csv文档处理有进一步的了解。

3、本文基于Python网络爬虫,利用爬虫库,实现穷游网的获取。实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

4、可以根据自己的需要选择自己的喜欢的城市获取自己想要的有效信息 。

5、需要本文源码的小伙伴,后台回复“穷游攻略”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐: