python爬虫使用 requests-html爬取网页信息以及常用方法

目录

安装

使用

常用方法:

requests-html

获取a链接

获取img链接

操作列表两种写法

python处理数据常用方法

数组追加

obiect转str类型

 arr转字符串->(仅限['xxxxxxxxxxxx'])

获取标签下文本

自定义保存页面图片 

 字符串去空格

python 文件读写(追加、覆盖)

toString且' 转 "

int拼接组装

字符串拼接组装,并用符号分割

python类型转换

删除多余标签内的内容

html转字符串:

对象转json:

python json.dumps() 中文乱码问题


安装

pip install requests-html

使用

from requests_html import HTMLSession

# 获取请求对象
session = HTMLSession()

sina = session.get('https://news.sina.com.cn/')

sina.encoding = 'utf-8'

print(sina.text)

常用方法:

requests-html

  • 获取a链接

# 绝对链接,全路径
sina.html.xpath('/html/body/div[3]/ul/li/a').absolute_links

# links 相对链接
sina.html.xpath('/html/body/div[3]/ul/li/a').links

# 得到的是{'http://xxxxxx'}的参数,需要转一下
obj.__str__().replace("{'", "").replace("'}", "")
  • 获取img链接

# 获取链接地址
detail.html.xpath('/html/body/div/img/@src')

# 获取到的是['xxxxxxx.jpg']格式
img.__str__().replace("['", "").replace("']", "")
  • 操作列表两种写法

循环需要从0开始,node[i] == "node{}".format(i+1),因为xpath内没有下标0,所以format取元素下标加1

for i in range(0, len(lis)):
    name = sina.html.xpath('/html/body//span/text()')[i]
    list = sina.html.xpath('/html/body//li/div/a/span/text()'.format(i+1))

python处理数据常用方法

  • 数组追加

list2 = []
...
list2.append(node)
node = {}
  • obiect转str类型

object.__str__().replace("{'", "").replace("'}", "")
  •  arr转字符串->(仅限['xxxxxxxxxxxx'])

['xxxxxxxxxxxx'].__str__().replace("['", "").replace("']", "")
  • 获取标签下文本

# /text()标签下的文本
detail.html.xpath('/html/body/a/text()')

# //text() 标签下和子标签内容
detail.html.xpath('/html/body//text()')
  • 自定义保存页面图片 

def loadPage(img_url):
    response = requests.get(img_url)
    return response.content


# 自定义保存页面图片函数
def getImage(image_url):
    # print("image_url= {}".format(image_url))
    if image_url is None:
        return ""
    if len(image_url) <= 10:
        return ""
    name = image_url.split("/")[len(image_url.split("/"))-1]
    fth = "image/{}".format(name)
    img = loadPage(image_url)
    with open(fth, "wb") as f:
        f.write(img)
    return fth
  •  字符串去空格

def strStrip(string):
    string = string.replace('\n', '').replace('\r', '').replace('\t', '').strip()
    string = string.replace("'", "").replace('\\n', '').replace('\\r', '').replace('\\t', '')
    return string
  • python 文件读写(追加、覆盖)

  • 写json到本地write_json a持续写入
def write_json(content):
    with open('XueWei.txt', 'a', encoding='utf-8') as fObj:
        split = ",\n"
        json.dump(content, fObj, ensure_ascii=False)
        fObj.write(split)
        fObj.close()
  • 写文本到本地 a持续写入
def write(content):
    split = "\n"
    f = open(file_path, 'a', encoding='utf-8')
    # 写入数据
    f.write(content)
    f.write(split)
    # 关闭文件
    f.close()
  • toString且' 转 "

# ' 转 "
def toString(obj):
    return obj.__str__().replace("'", "\"")
  • int拼接组装

# return int 11 + 11 = 1111 
def addInt(first, end):
    return int(first.__str__() + end.__str__())
  • 字符串拼接组装,并用符号分割

# return String addStr("第一部", ",", "第二部")
def addStr(first, sp, end):
    if len(first.__str__()) <= 0:
        return end.__str__()
    return first.__str__() + sp + end.__str__()
  • python类型转换

    • type("21")   获取类型
    • int("23")    字符串转换成int数字
    • item['name']      取对象里key为name的值
    • num=322
      str='%d'%num   数字转换成字符串
# int(x[, base]) 将x转换为一个整数,base为进制,默认十进制
#
# long(x[, base] ) 将x转换为一个长整数
#
# float(x) 将x转换到一个浮点数
#
# complex(real[, imag])  创建一个复数
#
# str(x) 将对象 x 转换为字符串
#
# repr(x) 将对象 x 转换为表达式字符串
#
# eval(str)  用来计算在字符串中的有效Python表达式, 并返回一个对象
#
# tuple(s) 将序列 s 转换为一个元组
#
# list(s) 将序列 s 转换为一个列表
#
# set(s) 转换为可变集合
#
# dict(d) 创建一个字典。d 必须是一个序列(key, value) 元组。
#
# frozenset(s) 转换为不可变集合
#
# chr(x) 将一个整数转换为一个字符
#
# unichr(x) 将一个整数转换为Unicode字符
#
# ord(x) 将一个字符转换为它的整数值
#
# hex(x) 将一个整数转换为一个十六进制字符串
#
# oct(x)  将一个整数转换为一个八进制字符串
  • 删除多余标签内的内容

# 删除某个属性
doc('.article-t style').remove()

# 清楚多余的标签,只保留纯文本
from w3lib.html import remove_tags
 
a = '<em><em>ai</em></em>工程师'
print(remove_tags(a))

 

html转字符串:

html.__str__().replace('"', "'")

对象转json:

   

import json

json.loads() 将json转换为dict
json.dumps() 将dict转换为json
json.load() 将json文件转换为dict
json.dump() 将dict转换为json文件 person.json

# 类对象转换为json
person_json = json.dumps(person.__dict__)   
 
# 或者
# 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__
person_json = json.dumps(person, default=convert2json)

# 将person转换为dict
def convert2json(person):
  return {
    'name': person.name,
    'age': person.age,
    'email': person.email
  }

# dict/对象转换为json文件
with open('person.json', 'w') as f:
  json.dump(person, f)

# 将json文件转换为dict/对象
import json
with open('person.json', 'r') as f:
  print(json.load(f))

python json.dumps() 中文乱码问题

json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串。

写法:

Python2 :json.dumps(odata, ensure_ascii=False).decode('utf8')
                json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')
Python3 :json.dumps(odata, ensure_ascii=False)

自动化 selenium 库安装使用Python/Java

Python -- Selenium开启开发者工具(F12)

Python爬虫之selenium(全套操作)常用的定位元素与常用方法

Python -- Selenium获取请求的接口数据信息/浏览器Network的请求和响应

Python一些常用方法-整理

python入门-从安装环境配置到做一个下班打卡提醒.exe小工具

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您介绍一下如何使用 Python 爬虫来爬取房产数据并保存到本地。 首先,您需要选择一个合适的网站来进行爬取。例如,可以选择链家网、安居客等房产网站。然后,您需要分析该网站的页面结构和数据请求方式,确定需要爬取哪些数据,以及如何获取这些数据。 接着,您可以使用 Pythonrequests 库来发送 HTTP 请求,获取网页内容。然后,可以使用 BeautifulSoup 库来解析网页内容,提取需要的数据。 最后,您可以使用 Python 的 Pandas 库将数据保存到本地的 Excel 或 CSV 文件中。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送 HTTP 请求获取网页内容 url = 'https://bj.lianjia.com/ershoufang/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') # 解析网页内容,提取需要的数据 house_list = soup.find_all('div', {'class': 'info'}) data = [] for house in house_list: name = house.find('div', {'class': 'title'}).text.strip() price = house.find('div', {'class': 'price'}).text.strip() area = house.find('div', {'class': 'houseInfo'}).text.strip() data.append([name, price, area]) # 将数据保存到本地文件 df = pd.DataFrame(data, columns=['名称', '价格', '面积']) df.to_excel('house_data.xlsx', index=False) ``` 这是一个简单的示例代码,您可以根据您需要爬取的数据和网站的不同来进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值