import requests
from re import findall
from json import dumps
import csv
# 1. 发送请求
headers = {
'user-agent': xxxxxxx
}
response = requests.get('https://cd.zu.ke.com/zufang', headers=headers)
# 2. 获取结果
result = response.text
# print(result)
# 3.解析数据
prices = findall(r'(\d+)', result)
# print(prices)
areas = findall(r'(\d+\.?\d*)㎡', result)
# print(areas)
addresses = findall(r'([\u4e00-\u9fa5]+)-([\u4e00-\u9fa5]+)-, result)
# print(addresses)
data = map(lambda i1, i2, i3:{'区': i3[0], '地址': '-'.join(i3), '价格': i1, '面积': i2}, prices, areas, addresses)
# print(list(data))
# with open('files/租房信息.json', 'w', encoding='utf-8') as f:
# f.write(dumps(list(data)))
# 获取文件对象
f = open('files/租房.csv', 'w', encoding='utf-8', newline='')
w = csv.DictWriter(f, ['区', '地址', '价格', '面积'])
# 写入数据
w.writeheader()
w.writerows(list(data))
import csv
# 1.创建writer对象
# csv.writer(csv文件对象) - 写入数据的时候一行内容对应一个列表
# csv.DictWriter(csv文件对象,字段名列表) - 写入数据的时候一行内容对应一个字典
# 1)使用writer
# 获取文件对象 - 打开文件(w、a)
# 获取文件对象 - 打开文件(w、a)
f1 = open('files/data1.csv', 'w', encoding='utf-8', newline='')
w1 = csv.writer(f1)
# 2)使用DictWriter
f2 = open('files/data2.csv', 'w', encoding='utf-8', newline='')
w2 = csv.DictWriter(f2, ['姓名', '年龄', '分数'])
# 2.写入数据
# writer对象.writerow(一行数据)
# writer对象.writerows(多行数据)
# 1)writer写入数据
w1.writerow(['姓名', '年龄', '分数'])
w1.writerow(['小明', 18, 90])
w1.writerows([
['小花', 20, 70],
['小华', 19, 80],
['小天', 20, 60]
])
# 2)DictWriter写入数据
# 将字段作为第一行内容
w2.writeheader()
w2.writerow({'姓名': '小明', '年龄': 18, '分数': 98})
w2.writerow({'姓名': '小花', '年龄': 20, '分数': 78})
w2.writerows([
{'姓名': '小君', '年龄': 18, '分数': 85},
{'姓名': '小天', '年龄': 19, '分数': 81}
])
import csv
# 1.创建reader
# csv.reader(csv文件对象) - 每一行对应一个列表获取数据
# csv.DictWriter(csv文件对象) - 每一行对应一个字典获取数据
# 1)reader
f1 = open('files/租房.csv', 'r', encoding='utf-8')
r1 = csv.reader(f1)
# print(r1) # <_csv.reader object at 0x000001CE394F28C0> 迭代器
f2 = open('files/租房.csv','r', encoding='utf-8')
r2 = csv.DictReader(f2)
# 2)获取内容
print(next(r1))
print(list(r1))
print(next(r2))
for x in r2:
print(x)
1)html - 负责给网页提供内容(通过各种各样的标签给网页提供各种各样的内容)
2)css - 负责网页内容的样式和布局
3)js - 负责网页内容变化
注意:输入标签名 + tab
一个网页对应一个html文件,html文件内容就可以构建一个网页。
html为网页提供的内容的基本单位是标签。
1)标签(元素)语法:
双标签:<标签名 属性名1=属性值1 属性名2=属性值2 …>标签内容标签名>
单标签:<标签名 属性名1=属性值1 属性名2=属性值2 …> 或者 <标签名 属性名1=属性值1 属性名2=属性值2 …
2)常见标签
标题标签:h1~h6
段落标签:p
图片: img (通过src属性来提供图片的 - scr属性保存图片的地址)
超链接:a (通过href属性提供跳转地址,通过标签内容提供可点击内容)
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>1级标题h1>
<br>
<p>段落p>
<img src="./files/花.png" alt="花" title="花花">
<img src="./files/花1.png" alt="花">
<hr>
<a href="https://www.baidu.com">百度a>
<br><br>
<a href="https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6%E7%83%AD%E6%90%9C&sa=ire_dl_gh_logo_texing&rsv_dl=igh_logo_pcs">
<img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" alt="">
a>
<hr>
<input type="text">
<button>确定button>
<br><br>
body>
html>
css(层叠样式表,简称样式表)负责网页内容的样式和布局的。
1)内联样式表:将样式写在标签的style属性中
2)内部样式表:将样式写在style标签中(style标签通常放在head中)
3)外部样式表:将样式写在css文件中,然后在html文件中用link标签导入
选择器{属性1:属性值1; 属性2:属性值2; …}
选择器 - 选中需要设置样式的标签(找标签)
1)元素选择器(标签选择器):
直接将标签名作为选择器,选中网页中所有的指定标签
a{} - 选中所有的a标签
p{} - 选中所有的p标签
2)class选择器:
a.在标签class属性值前加.作为一个选择器,选中class属性值为指定值的标签
.c1 - 选中所有class属性值为c1的标签
.person - 选中所有class属性值为person的标签
b.将’标签名.class属性值’结构作为一个选择器,选中所有class属性值为指定值的指定标签
p.c1{} - 选中所有class属性值为c1的p标签
a.c2{} - 选中所有class属性值为c2的超链接
c.将’.class属性值1.class属性值2.class属性值3…'结构作为一个选择器,选择class属性同时为指定值的标签
.c1.c2{} - 选中class属性值同时为c1和c2的所有标签
.c1.c2.c3{} - 选中class属性值同时为c1和c2和c3的所有标签
**注意:**多个不同的标签可以拥有相同的class属性值;同一个标签可以同时拥有多个不同的class属性值
3)id选择器:
在id属性值前面加#作为一个选择器,选中id属性值为指定值的标签(id属性值是唯一的)
#p1{} - 选中id属性为p1的标签
4)子代选择器:
将多个独立的选择器用>连接作为一个选择器
div>.c1{} - 选中div的子标签中所有class值为c1的标签
.c2>p{} - 选择class为c2中标签中所有的p标签(前后是父子关系)
5)后代选择器:
将多个独立的选择器用空格隔开作为一个选择器
div .c1{} - 选择div的后代标签中所有class值为c1的标签
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<style>
a{color:green;}
.c1{color:purple}
p.c1{font-size:18px}
.c2{background-color:yellow}
.c1.c2{
font-size:19px;
border:2px solid red;
}
#s2{
font-size:36px
}
div>.c4{color:red}
div .c4{background-color:green}
style>
<link rel="stylesheet" href="外部.css">
head>
<body>
<a href="">我是超链接1a>
<span>我是span1span>
<a href="">我是超链接2a>
<p class="c1 c3">我是段落1p>
<a href="" class="c1">我是超链接3a>
<span class="c1 c2" id="s2">我是span2span>
<p >我是段落2p>
<p class="c1 c2 c3">我是段落3p>
<hr>
<p class="c4">我是段落4p>
<a href="">我是超链接4a>
<p>我是段落5p>
<span class="c4">我是span3span>
<div>
<p>
<span class="c4">我是span4span>
p>
<a href="" class="c4">我是超链接5a>
div>
body>
html>
import requests
# 注意:使用BeautifulSoup来对网页进行解析安装第三方库:beautifulsoup4,然后在通过bs4使用这个库
from bs4 import BeautifulSoup
# 0.准备网页源代码
headers = {
'User-Agent': xxxxxx
}
response = requests.get('https://movie.douban.com/top250', headers=headers)
html = response.text
# 1.创建soup对象
# BeautifulSoup(网页源代码, 'lxml') - 根据指定的网页源代码创建soup对象并且返回(suop对象就是整个网页)
soup = BeautifulSoup(html, 'lxml')
# 2.获取标签
# 1)使用soup获取标签
# soup对象.select(css选择器) - 获取css选择器选中的所有标签,返回一个列表,列表中的标签是被选中的所有的标签对象
# soup对象.select_one(css选择器) - 获取css选择器选中的第一个标签,返回一个标签对象
all_a = soup.select('a')
# print(all_a)
title_a = soup.select('.nav-items a')
print(title_a)
div1 = soup.select_one('#doubanapp-tip')
print(div1)
# 2)使用标签获取标签
# 标签对象.select(css选择器) - 获取指定标签中选择器选择的所有标签
# 标签对象.select_one(css选择器) - 获取指定标签中选择器选择的第一个标签
result = div1.select('a')
print(result)
result = div1.select_one('a')
print(result)
# 3.获取标签内容和标签属性
# 1)获取标签内容:标签对象.text
for x in title_a:
print(x.text)
# 2)获取标签属性值:标签对象.attrs[属性名]
for x in title_a:
print(x.attrs['href'])