Python Http请求和HTML的解析

Posted -早起的码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")

#我们需要的用户名在<div class="auth">标签下,利用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用法实例

#post请求某http页面,获得累计销售额:
headerss = 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9'
           ,'Connection': 'keep-alive'
           ,'Cookie': 'uab_collina=16557834343430'
          ,'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'
           ,'X-Requested-With': 'XMLHttpRequest'


url= "http://www.sample.test.com/search?sortNew=0&period=30"
r = requests.get(url = url, timeout=10, headers=headerss)
con = r.content.decode('utf-8')
soup = BeautifulSoup(con, "html.parser")


# 解析获取tr元素列表
tr_items = soup.tbody.select("tr")
for child in tr_items:
    mon = child.select("td")[1].get_text().replace(",", "")
    if (mon.find("亿")>=0):
        mon = float(mon.replace("w", "")) * 10000 * 10000
    elif (mon.find("w")>=0) :
        mon = float(mon.replace("w", "")) * 10000
    else :
        mon = float(mon.replace("w", ""))
    amount = amount + mon

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


header1= 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.9'
    ,'Connection': 'keep-alive'
    ,'Cookie': 'uab_collina=165578057852259411739609;85881271'
    ,'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'
    ,'X-Requested-With': 'XMLHttpRequest'
    , 'Origin': 'http://www.sample.test.com'
    ,'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'


store_url= "http://www.sample.test.com/promotion"
#注意header中的Content-Type传值
datas="SendFrom=&hasCoupon=-1&page="
datas = datas.format(province, page)
r = requests.post(url=store_url, data=datas.encode('utf-8'), headers=header1)
con = r.content.decode('utf-8')
soup = BeautifulSoup(con, "html.parser")
item=[]

#查找所有符合class的table元素并获取第一个,然后筛选其中的所有tr元素

for each in soup.find_all('table','class':'location-table')[1].select("tr"):  
    item..append(each.select("td")[0].select("a")[1].get_text().strip())

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

以上是关于Python Http请求和HTML的解析的主要内容,如果未能解决你的问题,请参考以下文章

Python Http请求和HTML的解析

Python Http请求和HTML的解析

Python请求代理错误'无法解析'

python爬虫之真实世界中的网页解析

python 解析ajax请求带有json参数,请求方式是post的url(注意:参数的json格式的)

Python 是不是有用于解析 HTTP 请求和响应的模块?