学习Python的第四天

爬虫学习

# -*- coding: utf-8 -*-
# @Time    : 2019/7/31 11:28
# @Author  : Eric Lee
# @Email   : li.yan_li@neusoft.com
# @File    : spider_dangdang.py
# @Software: PyCharm
import requests
 from lxml import html
def spider_dangdang(isbn):
# 目标站点地址
url = 'http://search.dangdang.com/?key={}&act=input'.format(isbn)
# print(url)
# 获取站点str类型的响应
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}

resp = requests.get(url, headers=headers)
html_data = resp.text
#  将html页面写入本地
# with open('dangdang.html', 'w', encoding='utf-8') as f:
#     f.write(html_data)

# 提取目标站的信息
selector = html.fromstring(html_data)
ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
print('您好,共有{}家店铺售卖此图书'.format(len(ul_list)))

# 遍历 ul_list
for li in ul_list:
    #  图书名称
    title = li.xpath('./a/@title')[0].strip()
    print(title)
    #  图书购买链接
    link = li.xpath('a/@href')[0]
    print(link)
    #  图书价格
    price = li.xpath('./p[@class="price"]/span[@class="search_now_price"]/text()')[0]
    price = float(price.replace('¥',''))
    print(price)
    # 图书卖家名称
    store = li.xpath('./p[@class="search_shangjia"]/a/text()')
    # if len(store) == 0:
    #     store = '当当自营'
    # else:
    #     store = store[0]
    store = '当当自营' if len(store) == 0 else store[0]
    print(store)

XPath

XPath 节点

节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

请看下面这个 XML 文档:

    <?xml version="1.0" encoding="UTF-8"?>

  <bookstore>
  <book>
   <title lang="en">Harry Potter</title>
   <author>J K. Rowling</author>
   <year>2005</year>
   <price>29.99</price>
 </book>
</bookstore>

上面的XML文档中的节点例子:
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)

基本值(或称原子值,Atomic value)
基本值是无父或无子的节点。
基本值的例子:
J K. Rowling
"en"
项目(Item)
项目是基本值或者节点。

节点关系
父(Parent)
每个元素以及属性都有一个父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

 <book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

子(Children)
元素节点可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

 <book>
     <title>Harry Potter</title>
   <author>J K. Rowling</author>
   <year>2005</year>
   <price>29.99</price>
</book>

同胞(Sibling)
拥有相同的父的节点
在下面的例子中,title、author、year 以及 price 元素都是同胞:

<book>
  <title>Harry Potter</title>
 <author>J K. Rowling</author>
  <year>2005</year>
 <price>29.99</price>
</book>

先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:

 <bookstore>
   <book>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
   <price>29.99</price>
 </book>

 </bookstore>

后代(Descendant)
某个节点的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:

  <bookstore>
     <book>
     <title>Harry Potter</title>
     <author>J K. Rowling</author>
     <year>2005</year>
      <price>29.99</price>
 </book>
 </bookstore>

选取节点
image

电影top5

  import requests
  from lxml import html
  import pandas as pd
 import jieba
 from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def Film():
# 目标站点地址
url = 'https://movie.douban.com/cinema/later/chongqing/'
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
resp = requests.get(url, headers=header)
html_data = resp.text
# 提取目标站的信息
selector = html.fromstring(html_data)
film = selector.xpath('//div[@id="showing-soon"]/div')
print(film)
div_list = []
for film_list in film:
    # 电影名
    title_list = film_list.xpath('./div/h3/a/text()')[0]
    print(title_list)
    # 上映时间
    time_list = film_list.xpath('./div/ul/li[1]/text()')[0]
    print(time_list)
    # 电影类型
    type_list = film_list.xpath('./div/ul/li[2]/text()')[0]
    print(type_list)
    # 上映国家
    con_list = film_list.xpath('./div/ul/li[3]/text()')[0]
    print(con_list)
    # 想看人数
    number_list = film_list.xpath('./div/ul/li[4]/span/text()')[0]
    print(number_list)
    # 替换
    number_list = int(number_list.replace('人想看',''))
    # 添加电影信息
    div_list.append({
        'title': title_list,
        'time': time_list,
        'type': type_list,
        'con': con_list,
        'number': number_list
    })
    # 按照想看人数排序
div_list.sort(key=lambda x:x['number'], reverse=True )
print(div_list)
# 遍历
for items_list in div_list:
    print(items_list)
# 绘制top5最想看的电影占比图
# 提取前五部电影信息
top5_store = [div_list[i] for i in range(5)]
# 提取电影名
x = [x['title'] for x in top5_store]
print(x)
# 提取想看人数
y = [x['number'] for x in top5_store]
print(y)
explode = [0.1, 0, 0, 0, 0]
plt.pie(y, explode=explode, labels=x, shadow=True, autopct='%1.1f%%')
plt.axis('equal')
plt.legend(loc=2)
plt.show()

# 绘制即将上映电影国家的占比图
counts = {}
# 提取所有上映国家
s = [x['con'] for x in div_list]
print(s)
# 统计上映国家与数量
for word in s:
    counts[word] = counts.get(word, 0) + 1
print(counts)
# 提取上映国家
name = counts.keys()
print(name)
# 提取数量
number = counts.values()
print(number)
explode1 = [0.1, 0, 0, 0]
plt.pie(number, explode=explode1, labels=name, shadow=True, autopct='%1.1f%%')
plt.axis('equal')
plt.legend(loc=2)
plt.show()
Film()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352