文档章节

python爬虫之定位网页元素的三种方式

l
 linjin200
发布于 2018/12/10 15:47
字数 584
阅读 10
收藏 0

python爬虫之定位网页元素的三种方式

2018年08月02日 13:30:02 Barry__ 阅读数:1373 标签: python 更多

个人分类: python

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/rankun1/article/details/81357179

在做爬虫的过程中,网页元素的定位是比较重要的一环,本文总结了python爬虫中比较常用的三种定位网页元素的方式。

1.普通的BeautifulSoup find系列操作

2.BeautifulSoup css选择器

3. xpath

这三种方式灵活运用,再配合上正则表达式,没有什么网页能难倒你啦。

我们以获取豆瓣电影top250第一页的电影标题为例来比较:

 

 

 

 

import requests
from bs4 import BeautifulSoup
from lxml import etree
 
# 通过find定位标签
# BeautifulSoup文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
def bs_parse_movies(html):
    movie_list = []
    soup = BeautifulSoup(html, "lxml")
    # 查找所有class属性为hd的div标签
    div_list = soup.find_all('div', class_='hd')
    # 获取每个div中的a中的span(第一个),并获取其文本
    for each in div_list:
        movie = each.a.span.text.strip()
        movie_list.append(movie)
 
    return movie_list
 
# css选择器定位标签
# 更多ccs选择器语法:http://www.w3school.com.cn/cssref/css_selectors.asp
# 注意:BeautifulSoup并不是每个语法都支持
def bs_css_parse_movies(html):
    movie_list = []
    soup = BeautifulSoup(html, "lxml")
    # 查找所有class属性为hd的div标签下的a标签的第一个span标签
    div_list = soup.select('div.hd > a > span:nth-of-type(1)')
    # 获取每个span的文本
    for each in div_list:
        movie = each.text.strip()
        movie_list.append(movie)
 
    return movie_list
 
# XPATH定位标签
# 更多xpath语法:https://blog.csdn.net/gongbing798930123/article/details/78955597
def xpath_parse_movies(html):
    et_html = etree.HTML(html)
    # 查找所有class属性为hd的div标签下的a标签的第一个span标签
    urls = et_html.xpath("//div[@class='hd']/a/span[1]")
 
    movie_list = []
    # 获取每个span的文本
    for each in urls:
        movie = each.text.strip()
        movie_list.append(movie)
 
    return movie_list
 
def get_movies():
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
        'Host': 'movie.douban.com'
    }
 
    link = 'https://movie.douban.com/top250'
    r = requests.get(link, headers=headers, timeout=10)
    print("响应状态码:", r.status_code)
    if 200 != r.status_code:
        return None
 
    # 三种定位元素的方式:
 
    # 普通BeautifulSoup find
    return bs_parse_movies(r.text)
    # BeautifulSoup css select
    return bs_css_parse_movies(r.text)
    # xpath
    return xpath_parse_movies(r.text)
 
movies = get_movies()
print(movies)
 
 

© 著作权归作者所有

共有 人打赏支持
l
粉丝 17
博文 479
码字总数 528391
作品 0
福州
程序员
私信 提问
Python开发简单爬虫--学习笔记

一、概述 目标 掌握开发轻量级爬虫 内容 爬虫简介 简单爬虫架构 URL管理器 网页下载器(urllib2) 网页解析器(BeautifulSoup) 完整实例:爬取百度百科雷军词条相关的1000个页面数据 tips: 轻量...

老男孩coder
2018/06/17
0
0
Python爬虫入门 | 2 爬取豆瓣电影信息

  这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源。看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今...

Web前端社区
2018/07/25
0
0
Scrapy爬虫 (1)爬取菜鸟Git教程目录

  Scrapy作为爬虫利器,是一个很好的Pyhon爬虫框架,现在也已经支持Python3了。具体的安装过程可以参考:http://www.yiibai.com/scrapy/scrapyenvironment.html 。关于srapy的具体介绍,可...

jclian91
2017/11/24
0
0
Python 爬虫入门(一)——爬取糗百

爬取糗百内容 GitHub 代码地址https://github.com/injetlee/Python/blob/master/qiubaicrawer.py 微信公众号:【智能制造专栏】,欢迎关注。 本文目标 掌握爬虫的基本概念 Requests 及 Beau...

李英杰同学
2018/07/26
0
0
python网络爬虫-爬取网页的三种方式

0.1 抓取网页 本文将举例说明抓取网页数据的三种方式:正则表达式、BeautifulSoup、lxml。 利用该代码获取抓取整个网页。 0.2 爬取目标 爬取http://example.webscraping.com/places/default...

糖宝lsh
01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

牛津词典 2018 年度词汇 ——「有毒」!

简评:本文并没有「标题党」,牛津词典公布的 2018 年度词汇就是 Toxic. 意为「有毒的」。 2018 was toxic. Toxic 这个词是什么意思呢? 牛津词典(Oxford Dictionaries)在 Word of the Da...

极光推送
13分钟前
0
0
浅谈Service Mesh体系中的Envoy

https://blog.csdn.net/yunqiinsight/article/details/81019255

易野
22分钟前
0
0
嵌入式应用选择合适的微控制器

准备所需硬件接口列表 使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微控制器中有两种常见的接口类型需要列出。第一种是通信接口,这些是外围设备,如USB,S...

linuxCool
29分钟前
3
0
Group by使用

概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得配合...

小橙子的曼曼
41分钟前
4
0
机械臂写中文

Make Me a Hanzi https://www.skishore.me/makemeahanzi/ 使用uArm Swift Pro机械臂写中文-毛笔字 https://github.com/makelove/Robot_Arm_Write_Chinese...

itfanr
52分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部