首页 > 编程语言 >python解析网页数据BeautifulSoup和xpath

python解析网页数据BeautifulSoup和xpath

时间:2022-12-05 22:00:59浏览次数:41  
标签:xpath python text resp BeautifulSoup class address div find

前言:requests请求并获取数据后,解析数据通常用两种方法(BeautifulSoup和xpath),下面以某房chan数据有例子,分别使用不同的方法解析数据。

一、xpath方法:

from lxml import etree

e = etree.HTML(resp.text)
names = [n.strip() for n in e.xpath("//div[@class='nlcd_name']/a/text()")]

二、BeautifulSoup方法:

from bs4 import BeautifulSoup

bs = BeautifulSoup(resp.text, 'html.parser')
nl_con = bs.find("div", class_='nl_con clearfix')
li_list = nl_con.find_all("li")
lst = []
for item in li_list:
names = item.find('div', class_="nlcd_name")


个人比较喜欢用BeautifulSoup方法,一是BeautifulSoup方法接触比较早,而且BeautifulSoup方法可以跟re方法结合使用。非常灵活方便。


详细实例:

import requests
from lxml import etree
import pandas

headers = {
"User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KABUL, like Gecko) "
"Chrome/86.0.4240.198Safari/537.36 "
}
for i in range(1, 2):
url = f"https://newhouse.fang.com/house/s/b9{i}"
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding
e = etree.HTML(resp.text)
names = [n.strip() for n in e.xpath("//div[@class='nlcd_name']/a/text()")]
address = e.xpath("//div[@class='address']/a/@title")
prices = [d.xpath('string(.)').strip() for d in e.xpath("//div[@class='nhouse_price']")]
fangyuan = [n.strip() for n in e.xpath("//div[@class='fangyuan']/span/text()")]
data = []
for n, a, p, f in zip(names, address, prices, fangyuan):
data.append([n, a, p ,f])

for i in data:
print(i)
df = pandas.DataFrame(data, columns=['小区名', '地址', '单价', '是否在售'])
print(df)

python解析网页数据BeautifulSoup和xpath_python

python解析网页数据BeautifulSoup和xpath_BeautifulSoup_02



import requests
from bs4 import BeautifulSoup
import re
import pandas

headers = {
"User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KABUL, like Gecko) "
"Chrome/86.0.4240.198Safari/537.36 "
}
for i in range(1, 2):
url = f"https://newhouse.fang.com/house/s/b9{i}"
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding
bs = BeautifulSoup(resp.text, 'html.parser')
nl_con = bs.find("div", class_='nl_con clearfix')
li_list = nl_con.find_all("li")
lst = []
for item in li_list:
names = item.find('div', class_="nlcd_name")
names = names.find('a').text.strip()
address = item.find('div', class_="address")
address = address.find('a')['title']
prices = item.find('div', class_="nhouse_price").text.strip()
house_tyep = item.find('div', class_='house_type clearfix').text.replace('\n', ' ').replace('\r', '').replace(" ", "")
house_tyep = re.sub(r'[\s]+', '', house_tyep)
fangyuan = item.find('div', class_='fangyuan').text.replace('\n', ' ').replace('\r', '').replace(" ", "")
fangyuan = re.sub(r'[\s]+', '', fangyuan)
# print(names, address, prices, house_tyep, fangyuan)
# break
lst.append([names, address, prices, house_tyep, fangyuan])


# for i in lst:
# print(i)

df = pandas.DataFrame(lst, columns=['小区名', '地址', '户型信息', '单价', '是否在售'])
print(df)

python解析网页数据BeautifulSoup和xpath_python_03

python解析网页数据BeautifulSoup和xpath_xpath_04

标签:xpath,python,text,resp,BeautifulSoup,class,address,div,find
From: https://blog.51cto.com/u_14012524/5913305

相关文章

  • python 爬虫 几例
    爬取强大的BD页面,打印页面信息#第一个爬虫示例,爬取百度页面importrequests#导入爬虫的库,不然调用不了爬虫的函数response=requests.get("http://www.1xuni.cn")#......
  • 进入python的世界_day45_前端——JS的学习(和学python基础一样的学)
    一、JS介绍​ 是一门编程语言,可以进行逻辑运算,但是跟java没有关系主要是为了蹭热度​ 全称是JavaScript,曾经叫过ECMASript,创造出这门语言的公司已经倒闭完整的Java......
  • 【Python】函数和模块的使用
    1.引入函数有如下函数,问有多少组正整数解。\[x_1+x_2+x_3+x_4=8\]相当于把8个苹果分给4个人,每人至少一个,问有多少种分法。进一步等价于在分隔8个苹果的7个空隙之间插......
  • python之路42 JavaScript 基础语法
    JavaScript简介1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-26......
  • python-练习(字符串str与列表list)
    打印字符串"""根据下列文字,提取变量,使用字符串格式化打印信息湖北确诊67802人,治愈63326人,治愈率0.99"""region="湖南"confirmed=67802cure=63......
  • 2023年第 13期《python接口web自动化+测试开发》课程,12月24号开学!
    2023年第13期《python接口web自动化+测试开发》课程,12月24号开学(课程全面升级!)主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:2022年12月24号-20......
  • Python学习(八):代码结构——if else判断
    1.概述:1.注释:使用#,python会自动忽略#以后的语句;2.换行:使用\,可以使得后面的继续上前面的语句;2.ifelse写法:     ......
  • Python如何使用类里面的静态方法?
    需求:Python如何使用类里面的静态方法?解决:@staticmethod#静态方法,是挂载在类下面的方法示例:classobj:def__init__(self,host):self.host=......
  • 使用python脚本传递参数:(三种方式可收藏)
    背景:使用python脚本传递参数在实际工作过程中还是比较常用,以下提供了好几种的实现方式:一、使用sys.argv的数组传入说明:使用sys.argv必须按照先后的顺序传入对应的参数;sys.......
  • 力扣1337(java&python)-矩阵中战斗力最弱的 K 行(简单)
    题目:给你一个大小为 m *n 的矩阵 mat,矩阵由若干军人和平民组成,分别用1和0表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行......