栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

web端数据抓取

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

web端数据抓取

re正则表达式 BeautifulSoup Xpath Selenium四者对比

方法速度易用性使用条件使用概述
re正则表达式解析数据复杂熟悉re正则表达式语法requests请求获得html代码后,通过re正则字符串匹配获取数据,需要了解re所包含的相关方法,包括但不限re.compile,re.finditer,re.findall
BeautifulSoup定位及解析数据较慢简单利用页面标签 属性进行定位需要安装BeautifulSoup库并导入,requests请求获得html代码后,通过BeautifulSoup中的查找元素方法得到对应元素并获取数据。其中,通过id,class css等方式查找元素,需要在web页面查看元素的对应id,class等。
lxml中的xpath技术进行定位及解析数据较快简单安装lxml库,requests获取得到html代码后,通过lxml中的etree获取定位技术,定位对应元素,并通过内置text得到数据
Selenium定位及解析数据较慢简单Selenium作为所见即所得的第三方web测试库,需要熟悉定位,事件等操作,尤其是xpath定位技术。①安装Selenium库②下载ChromeDriver并加入到系统环境path变量中③下载Xpath Helper谷歌浏览器插件

总结:对于简单页面的数据爬取首选re正则表达式,BeautifulSoup作为补充;而一些页面会使用Ajax局部刷新技术,难以获取到数据的url地址时,考虑使用Selenium。

一 re正则表达式爬取青春有你3学员基本信息

import re
import requests
import datetime
def crawl_wiki_data():
    url = "https://baike.baidu.com/item/%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A0%E7%AC%AC%E4%BA%8C%E5%AD%A3?fromtitle=%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A02&fromid=24266334"
    headers ={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
                      " Chrome/92.0.4515.131 Safari/537.36"
    }
    try:
        resp = requests.get(url=url,headers=headers)
        print(resp.status_code)
        resp_text = resp.text
        print(resp.content.decode())
        # re正则解析数据
        obj = re.compile(r'(?P.*?)'
                         r'(?P.*?)'
                         r'(?P.*?)'
                         r'(?P.*?)',re.S)
        result = obj.finditer(resp_text)
        for item in result:
            print(item.group('name'),end=' ')
            print(item.group('where'),end=' ')
            print(item.group('star'),end=' ')
            print(item.group('flower'))
    except Exception as  e:
        print(e)
if __name__ == '__main__':
    crawl_wiki_data()

二 BeautifulSouo抓取微博热搜

import requests
from bs4 import BeautifulSoup
def main():
    url = r"https://s.weibo.com/top/summary?cate=realtimehot"
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    }
    res = requests.get(url=url,headers=headers)
    try:
        if res.status_code:
            print(res.status_code)

    except Exception as e:
        print(e)

    print(res.content.decode(encoding="GBK", errors="ignore"))

    soup = BeautifulSoup(res.text,'lxml')
    tds = soup.find_all('td',class_='td-02')
    print(len(tds))
    for td in tds:
      a = td.find_all('a')[0]  #find_all返回的是列表
      print(a.text)

if __name__ == '__main__':
    main()

三 Selenium爬取豆瓣top-250及微博热搜榜
Selenium爬取豆瓣top-250

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
url = 'https://movie.douban.com/top250'
for num in range(10):
    browser.get(url)
    spans = browser.find_elements_by_xpath("//div[@class='hd']//span[@class='title'][last()-1]")
    for span in spans:
        print(span.text)
    next_page = browser.find_element_by_xpath("//span[@class='next']")
    ActionChains(browser).double_click(next_page).perform()
    url =browser.current_url

Selenium爬取微博热搜

from selenium import webdriver
import time
browser = webdriver.Chrome()#实例化
url = 'https://s.weibo.com/top/summary'
browser.get(url)
browser.implicitly_wait(10)
res = browser.find_elements_by_xpath('//td[@]//a')
for it in res:
    print(it.text)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号