• Python Http请求和HTML的解析


     日常中我们经常会遇到用代码去HTTP请求一些地址或者返回的是HTML,然后解析一些其中的数据。今天我们来聊一聊。

    Http请求模块requests和解析html的BeautifulSoup。

    基本用法

    • 如果没有安装requests 请安装

    pip install requests 

    import requests‍

    x = requests.get('https://www.baidu.com/')

    # 返回 http 的状态码,200

    print(x.status_code)

    # 响应状态的描述,ok

    print(x.reason)

    # 返回编码,utf-8

    print(x.apparent_encoding)

    # 返回页面内容

    print(x.content)

    • 如果没有安装BeautifulSoup请安装

    pip install bs4

    pip install lxml

    应用可参考https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

    from bs4 import BeautifulSoup

    #创建一个对象

    soup = BeautifulSoup(con, "html.parser")

    #我们需要的用户名在

    标签下,利用BeautifulSoup获取内容

    name = soup.find("div", class_="auth").text

    #通过 id 选择器查找

    print(soup.select('#link1'))

    #层级选择器 查找

    print(soup.select('p #link1'))

    #标签选择器查找

    print(soup.select('title'))

    #通过类选择器查找

    print(soup.select('.sister'))

    #通过属性选择器查找

    print(soup.select('a[class="sister"]'))

    #获取文本内容 get_text()

    print(soup.select('title')[0].get_text())

    #获取属性 get('属性的名字')

    print(soup.select('a')[0].get('href'))

    GET用法实例

    1. #post请求某http页面,获得累计销售额:
    2. headerss = {'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9'
    3. ,'Connection': 'keep-alive'
    4. ,'Cookie': 'uab_collina=16557834343430'
    5. ,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    6. ,'X-Requested-With': 'XMLHttpRequest'}
    7. url= "http://www.sample.test.com/search?sortNew=0&period=30"
    8. r = requests.get(url = url, timeout=10, headers=headerss)
    9. con = r.content.decode('utf-8')
    10. soup = BeautifulSoup(con, "html.parser")
    11. # 解析获取tr元素列表
    12. tr_items = soup.tbody.select("tr")
    13. for child in tr_items:
    14. mon = child.select("td")[1].get_text().replace(",", "")
    15. if (mon.find("亿")>=0):
    16. mon = float(mon.replace("w", "")) * 10000 * 10000
    17. elif (mon.find("w")>=0) :
    18. mon = float(mon.replace("w", "")) * 10000
    19. else :
    20. mon = float(mon.replace("w", ""))
    21. amount = amount + mon

    POST用法实例​​​​​​​ 

    1. header1= {'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9'
    2. ,'Connection': 'keep-alive'
    3. ,'Cookie': 'uab_collina=165578057852259411739609;85881271'
    4. ,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    5. ,'X-Requested-With': 'XMLHttpRequest'
    6. , 'Origin': 'http://www.sample.test.com'
    7. ,'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
    8. store_url= "http://www.sample.test.com/promotion"
    9. #注意header中的Content-Type传值
    10. datas="SendFrom={}&hasCoupon=-1&page={}"
    11. datas = datas.format(province, page)
    12. r = requests.post(url=store_url, data=datas.encode('utf-8'), headers=header1)
    13. con = r.content.decode('utf-8')
    14. soup = BeautifulSoup(con, "html.parser")
    15. item=[]
    16. #查找所有符合class的table元素并获取第一个,然后筛选其中的所有tr元素
    17. for each in soup.find_all('table',{'class':'location-table'})[1].select("tr"):
    18. item..append(each.select("td")[0].select("a")[1].get_text().strip())

    ​​​​​学习更多技术,可以关注gongzhong号,早起的码农

  • 相关阅读:
    ARM pwn 入门 (3)
    1259:【例9.3】求最长不下降序列
    批量下载微信公众号要点
    SpringBoot - 实现启动时执行指定任务(CommandLineRunner、ApplicationRunner)
    【已拿offer】最新AI产品经理大厂面经(含百度&腾讯&科大讯飞&商汤&蚂蚁金服)
    银行数仓项目实战(一)--什么是数据仓库
    hdoj 3549 Flow Problem 【最大流入门 dinic算法】
    【Leetcode】148.排序链表
    Unity 热更--AssetBundle学习笔记 0.7
    图片转换到PDF
  • 原文地址:https://blog.csdn.net/liuzhoulong/article/details/76252530