矽昌--Wireless配置简述_drv_mac80211_teardown mac80211.sh-程序员宅基地

技术标签: 5G  linux  linux 开发  openwrt  

Wireless配置简述

1 编译

1.1 首次编译

​ 如果是第一次编译时就需要添加wifi模块,请检查所需编译版型的配置,配置位于openwrt-18.06/target/linux/siflower/ 文件夹下,例如sf19a28_ac28_fullmask_def.config为ac28版型的配置。 查看配置并作对应修改:(所有矽昌支持的版型的配置文件均在此路径下)

CONFIG_PACKAGE_dnsmasq=y
CONFIG_PACKAGE_wireless-regdb=y
CONFIG_PACKAGE_kmod-cfg80211=y
CONFIG_PACKAGE_kmod-mac80211=y
CONFIG_PACKAGE_MAC80211_DEBUGFS=y
CONFIG_PACKAGE_MAC80211_MESH=y
CONFIG_PACKAGE_kmod-sf_smac=y
CONFIG_PACKAGE_SFSMAC_DBGINFO_ALLOCS=y
CONFIG_PACKAGE_SFUMAC_WIFI_TEST_SCRIPTS=y
CONFIG_PACKAGE_SFUMAC_WIFI_ATE_TOOLS=y
CONFIG_PACKAGE_SFUMAC_FMAC=y
CONFIG_PACKAGE_libiwinfo=y
CONFIG_PACKAGE_hostapd-common=y
CONFIG_PACKAGE_iw=y
CONFIG_WPA_MSG_MIN_PRIORITY=3
CONFIG_DRIVER_11N_SUPPORT=y
CONFIG_DRIVER_11AC_SUPPORT=y
CONFIG_PACKAGE_wpad-mini=y
CONFIG_PACKAGE_iwinfo=y

修改完成后,若编译ac28镜像,则在openwrt-18.06目录下使用./make.sh ac28即可编译,编译完成后在当前目录即可得到镜像。

1.2 非首次编译

如果不是第一次编译,那么可以使用make menuconfig然后选中以下内容:(默认已经配置好,可以直接make -j V=s)

Kernel modules ---> Wireless Drivers--->kmod-sf_smac  
Network--->hostapd-common
Utilities--->iwinfo  
Base system--->dnsmasq

修改完成之后保存,在openwrt-18.06目录下使用make -j V=s即可编译,镜像位于bin/siflower/openwrt-siflower-sf16a18-mpw0-squashfs-sysupgrade.bin

2 wifi配置

1806 sdk 中的 wifi 配置沿用了 openwrt 原始的 wifi 配置,
可以参考 openwrt-wifi配置
配置文件在镜像中的位置为/etc/config/wireless,典型的配置如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTxXba7R-1671777490458)(https://developers.siflower.cn/document/picture_download?pictureId=5c6d004e5466e40001704766)]

配置分为两层,wifi-device对应到具体的wifi驱动设备,在我们的硬件中支持2.4G和5G两种device,
wifi-iface对应了单个wifi接口,与单个ssid相对应,
一个wifi-device下面可以配置多个wifi-iface,最多支持4个。

2.1 配置选项说明

2.1.1 wifi-device配置选项

注:默认值为”/”时表示该选项不一定会出现,只有在进行了某些设置的情况下才会出现;默认值为”-“时表示2.4G和5G有差异,将在描述里进行说明。

选项 值类型 默认值 描述
wifi-device string radio0 驱动设备名称
type string mac80211 驱动类型,目前固定为”mac80211”。
country string CN 国家码,2个大写字母,默认为CN,表示中国(China),国家码会影响信道和发射功率。
channel string/int - 信道,默认2.4G为信道1,值为”auto”时表示自动选取最优信道,不同国家信道限制不同,如中国地区2.4G信道为1~13 ,5G信道为36~64 、149~165。
txpower_lvl int 2 发射功率,可设值为0、1、2。该值越大,表示功率越大。
max_all_num_sta int 64 驱动所能连接设备个数的最大值
netisolate boolean 0 设备隔离,如果设置为1,则从该device下的设备无法访问同一网桥(bridge)中其它bssid的设备。
noscan boolean 0 值为1时,表示不扫描周围信道。
path string - 对应驱动在/sys/devices/下的节点,一般不作修改。默认2.4G为”platform/11000000.wifi-lb”,5G为”platform/17800000.wifi-hb”。
htmode string 20MHz 带宽模式,2.4G支持20MHz/40MHz,5G支持20MHz/40MHz/80MHz。
hwmode string - wifi工作模式,2.4G支持11b/11g/11n,5G支持11n/11a/11ac,最终的模式是由htmode和hwmode共同决定的
disabled boolean 0 0表示启用该驱动设备,1表示关闭该驱动设备。
ht_coex boolean / 值为1时,表示带宽20MHZ/40MHZ共存,与htmode有一定联系
2.1.2 wifi-iface配置选项
选项 值类型 默认值 描述
wifi-iface string default_radio0 wifi-iface节点名称
device string - 对应wifi-device驱动名称,默认2.4G为radio0,5G为radio1。
ifname string wlan0 网卡(iface)的名称,使用ifconfig时会显示对应名称。
network string lan 对应的网桥(bridge)名称,如果需要把wifi加入到lan口则配置该值为lan。
mode string ap (sta、minotor) ap对应热点,sta对应站点(station),monitor对应监听模式。默认为ap模式。
ssid string SiWIFi-**** wifi的名称,最大不超过32位。支持中文,但在串口会显示为”…“。默认名称中的数字来源于mac地址。
encryption string none 加密方式,”none”表示不加密,如果想加密,建议改成”psk2+ccmp”
key string 12345678 wifi密码,psk2需设置8位以上。当加密方式为不加密(none)时此选项不生效,而其他加密方式必须配置密码。
hidden boolean 0 是否隐藏热点,1表示隐藏,0表示不隐藏。隐藏后设备只能通过手动添加SSID才能连接wifi。
wpa_group_rekey int 3600 刷新GTK(广播/多播加密密钥)的时间间隔(以秒为单位)。若不设置此项,则使用CCMP / GCMP作为组密码时默认为86400秒(每天一次),使用TKIP作为组密码时默认为600秒(每10分钟一次)。
isolate boolean 0 连接此wifi的各设备之间是否隔离,1表示隔离,0表示不隔离。
group int - bridge中的分组,各个不同的group之间在bridge中是不能互相访问的。默认2.4G为0,5G为1。
netisolate boolean 0 如果配置为1,则从该bssid下的设备无法访问同一bridge中其它bssid的设备。
2.1.3 源码中如何修改wifi的默认配置

修改package/kernel/mac80211/files/lib/wifi/mac80211.sh文件即可。

#!/bin/sh
append DRIVERS "mac80211"

lookup_phy() {
	[ -n "$phy" ] && {
		[ -d /sys/class/ieee80211/$phy ] && return
	}

	local devpath
	config_get devpath "$device" path
	[ -n "$devpath" ] && {
		for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
			case "$(readlink -f /sys/class/ieee80211/$phy/device)" in
				*$devpath) return;;
			esac
		done
	}

	local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"
	[ -n "$macaddr" ] && {
		for _phy in /sys/class/ieee80211/*; do
			[ -e "$_phy" ] || continue

			[ "$macaddr" = "$(cat ${_phy}/macaddress)" ] || continue
			phy="${_phy##*/}"
			return
		done
	}
	phy=
	return
}

find_mac80211_phy() {
	local device="$1"

	config_get phy "$device" phy
	lookup_phy
	[ -n "$phy" -a -d "/sys/class/ieee80211/$phy" ] || {
		echo "PHY for wifi device $1 not found"
		return 1
	}
	config_set "$device" phy "$phy"

	config_get macaddr "$device" macaddr
	[ -z "$macaddr" ] && {
		config_set "$device" macaddr "$(cat /sys/class/ieee80211/${phy}/macaddress)"
	}

	return 0
}

check_mac80211_device() {
	config_get phy "$1" phy
	[ -z "$phy" ] && {
		find_mac80211_phy "$1" >/dev/null || return 0
		config_get phy "$1" phy
	}
	[ "$phy" = "$dev" ] && found=1
}

detect_mac80211() {
	devidx=0
	config_load wireless
	while :; do
		config_get type "radio$devidx" type
		[ -n "$type" ] || break
		devidx=$(($devidx + 1))
	done

	for _dev in /sys/class/ieee80211/*; do
		[ -e "$_dev" ] || continue

		dev="${_dev##*/}"

		found=0
		config_foreach check_mac80211_device wifi-device
		[ "$found" -gt 0 ] && continue

		mode_band="g"
		channel="1"
		htmode=""
		ht_capab=""
		ssidprefix="-2.4G"
		noscan="0"
		band="2.4G"
		htcodex="0"
		txpower="20"


		iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20

		iw phy "$dev" info | grep -q '5180 MHz' && {
			mode_band="a"
			channel="161"
			ssidprefix=""
			band="5G"
			txpower="25"
			iw phy "$dev" info | grep -q 'VHT Capabilities' && htmode="VHT80"
		}

		[ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"

		if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then
			path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
		else
			path=""
		fi
		if [ -n "$path" ]; then
			path="${path##/sys/devices/}"
			case "$path" in
				platform*/pci*) path="${path##platform/}";;
			esac
			dev_id="set wireless.radio${devidx}.path='$path'"
		else
			dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
		fi
		[ -f "/sys/devices/factory-read/countryid" ] && {
			country=`cat /sys/devices/factory-read/countryid`
		}
		ssid=SiWiFi-`cat /sys/class/ieee80211/${dev}/macaddress | cut -c 13- | sed 's/://g'`$ssidprefix
		ssid_lease=SiWiFi-租赁-$ssidprefix`cat /sys/class/ieee80211/${dev}/macaddress | cut -c 13- | sed 's/://g'`
		if [ ! -n "$country" ]; then
			country='CN'
		fi

		txpower_lvl=2
		[ -f "/etc/ext_pa_exist" ] && {
			txpower_lvl=1
		}
		uci -q batch <<-EOF
			set wireless.radio${devidx}=wifi-device
			set wireless.radio${devidx}.type=mac80211
			set wireless.radio${devidx}.country=${country}
			set wireless.radio${devidx}.txpower_lvl=${txpower_lvl}
			set wireless.radio${devidx}.txpower=${txpower}
			set wireless.radio${devidx}.channel=${channel}
			set wireless.radio${devidx}.band=${band}
			set wireless.radio${devidx}.hwmode=11${mode_band}
			set wireless.radio${devidx}.noscan=${noscan}
			set wireless.radio${devidx}.netisolate=0
			set wireless.radio${devidx}.max_all_num_sta=64
			set wireless.radio${devidx}.ht_coex=${ht_coex}
			${dev_id}
			${ht_capab}
			set wireless.radio${devidx}.disabled=0

			set wireless.default_radio${devidx}=wifi-iface
			set wireless.default_radio${devidx}.device=radio${devidx}
			set wireless.default_radio${devidx}.network=lan
			set wireless.default_radio${devidx}.mode=ap
			set wireless.default_radio${devidx}.ssid=${ssid}
			set wireless.default_radio${devidx}.encryption=none
			set wireless.default_radio${devidx}.key=12345678
			set wireless.default_radio${devidx}.hidden=0
			set wireless.default_radio${devidx}.ifname=wlan${devidx}
			set wireless.default_radio${devidx}.wpa_group_rekey=36000
			set wireless.default_radio${devidx}.isolate=0
			set wireless.default_radio${devidx}.group=1
			set wireless.default_radio${devidx}.disable_input=0
			set wireless.default_radio${devidx}.wps_pushbutton=1
			set wireless.default_radio${devidx}.wps_label=0

			set wireless.guest_radio${devidx}=wifi-iface
			set wireless.guest_radio${devidx}.device=radio${devidx}
			set wireless.guest_radio${devidx}.network=guest
			set wireless.guest_radio${devidx}.mode=ap
			set wireless.guest_radio${devidx}.ssid=${ssid}-guest
			set wireless.guest_radio${devidx}.encryption=none
			set wireless.guest_radio${devidx}.hidden=0
			set wireless.guest_radio${devidx}.ifname=wlan${devidx}-guest
			set wireless.guest_radio${devidx}.isolate=1
			set wireless.guest_radio${devidx}.group=1
			set wireless.guest_radio${devidx}.netisolate=0
			set wireless.guest_radio${devidx}.disable_input=0
			set wireless.guest_radio${devidx}.disabled=1
EOF
		uci -q commit wireless

			if [ "$devidx" == "0" ]; then
				uci -q batch <<-EOF
				set wireless.lease_radio${devidx}=wifi-iface
				set wireless.lease_radio${devidx}.device=radio${devidx}
				set wireless.lease_radio${devidx}.network=lease
				set wireless.lease_radio${devidx}.mode=ap
				set wireless.lease_radio${devidx}.ssid=${ssid_lease}
				set wireless.lease_radio${devidx}.encryption=none
				set wireless.lease_radio${devidx}.hidden=0
				set wireless.lease_radio${devidx}.ifname=wlan${devidx}-lease
				set wireless.lease_radio${devidx}.isolate=1
				set wireless.lease_radio${devidx}.group=1
				set wireless.lease_radio${devidx}.netisolate=0
				set wireless.lease_radio${devidx}.disable_input=0
				set wireless.lease_radio${devidx}.maxassoc=64
				set wireless.lease_radio${devidx}.disabled=1
				EOF
				uci -q commit wireless
			fi

		devidx=$(($devidx + 1))
	done
}

2.1.4 htmode与hwmode的对应关系

不同的hwmode决定了htmode可以配置的选项,下表列举了不同模式的对应关系。

2.1.4.1 2.4G配置
2.4G模式 配置 描述
11b option hwmode 11b 该模式下option htmode必须删除
该模式下option ht_coex必须删除
11g option hwmode 11g 该模式下option htmode必须删除
该模式下option ht_coex必须删除
11n option hwmode 11g option htmode HT20 (或option htmode HT40) option ht_coex 1 当ht_coex的值为1时,处于20MHz/40MHz混合模式;
当ht_coex的值为0时,htmode的值就是频宽
2.1.4.2 5G配置
5G模式 配置 描述
11a option hwmode 11a 该模式下option htmode必须删除
该模式下option ht_coex必须删除
11n option hwmode 11a option htmode HT20 (或option htmode HT40) option ht_coex 1 当ht_coex的值为1时,处于20MHz/40MHz混合模式;
当ht_coex的值为0时,htmode的值就是频宽
11ac option hwmode 11a option htmode VHT20 (或option htmode VHT40 或option htmode VHT80) 该模式下option ht_coex必须删除
2.1.5 encryption加密方式
WPA版本 密钥加密协议
psk2+tkip+ccmp psk2+tkip+aes WPA2 Personal (PSK) TKIP, CCMP
psk2+tkip WPA2 Personal (PSK) TKIP
psk2+ccmp psk2+aes psk2 WPA2 Personal (PSK) CCMP
psk+tkip+ccmp psk+tkip+aes WPA Personal (PSK) TKIP, CCMP
psk+tkip WPA Personal (PSK) TKIP
psk+ccmp psk+aes psk WPA Personal (PSK) CCMP
psk-mixed+tkip+ccmp psk-mixed+tkip+aes WPA/WPA2 Personal (PSK) mixed mode TKIP, CCMP
psk-mixed+tkip WPA/WPA2 Personal (PSK) mixed mode TKIP
psk-mixed+ccmp psk-mixed+aes psk-mixed WPA/WPA2 Personal (PSK) mixed mode CCMP
wep WEP

3.固件烧录之后的wifi配置

3.1 如何修改wifi配置

​ 直接修改配置文件/etc/config/wireless保存后执行**wifi reload**即可

wifi指令执行脚本位于/sbin/wifi,相关使用方法见下表格所示

指令 参数 描述
wifi - 不加任何参数,则重新启用”全部wifi”
wifi config 当”/etc/config/wireless”文件不存在时重新生成该文件
wifi reload 重新启用”配置有所更改的wifi”
wifi down 关闭全部wifi
wifi up 启用全部wifi
wifi status 以json串的方式打印wifi信息

3.2 查看wifi信息

使用”iw”指令可查看wifi相关信息,下面列出常见的iw指令。

指令 参数 描述 示例
iwinfo / 列出所有无线网络信息 iwinfo
iw info 列出单个wifi信息 iw wlan0 info
iw list 列出所有无线设备信息 iw list
iw scan 扫描周围信号 iw wlan1 scan
iw station dump 列出连接该wifi的所有设备信息 iw wlan0 station sump

3.3 新增AP节点

在/etc/config/wireless中增加一段即可,最简单的一种配置如下:

  config wifi-iface
        option device 'radio0'
        option network 'lan'  
        option mode 'ap'
        option ssid 'SiWiFi-new-ap'
        option encryption 'psk2+ccmp'
        option key '12345678'
        option ifname 'wlan0-1'

3.4 新增sta节点

在/etc/config/wireless中增加一段即可,实例如下:

config wifi-iface
        option key '12345678'
        option ifname 'sfi0'
        option network 'wwan'
        option encryption 'psk2+ccmp'
        option device 'radio0'
        option mode 'sta'
        option bssid 'A8:5A:F3:00:02:3F'
        option ssid 'SiWiFi-023c-2.4G-8_1'

4.wifi配置生效流程

4.1 如何修改默认配置?

​ 在板子上生成默认配置的脚本为lib/wifi/mac80211.sh,其在源码中位于package/kernel/mac80211/files/lib/wifi/mac80211.sh,此脚本用于生成/etc/config/wirelesss

4.2 默认配置生成后被应用到哪里?

​ /etc/config/wirelesss会被netifd和hostapd使用。
对于netifd,将直接读取wireless的配置;
对于hostapd,会由脚本/lib/netifd/wireless/mac80211.sh读取配置,生成配置文件/var/run/hostapd-phy.conf以供hostapd使用,该脚本在源码中位于package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh*。

4.3 wifi配置流程图

5 wifi驱动模块

wifi模块存放在板子上的目录为/lib/modules/4.14.90/,在板子启动过程中这些模块会依序自动加载

5.1 wifi驱动相关模块加载流程

5.2 wifi驱动模块的相关指令

指令 参数 描述
insmod “模块名称” … 加载该模块,简单指令如insmod /lib/modules/4.14.90/startcore.ko (或insmod startcore.koinsmod startcore)。需要注意的是,有些模块加载需要附加较多参数,建议使用sfwifi指令进行模块操作。
rmmod “模块名称” … 卸载该模块
modinfo “模块名称” … 显示该模块相关信息
sfwifi remove 移除wifi驱动相关模块,包括sf16a18_rf.ko、startcore.ko、sf16a18_fmac.ko
sfwifi reload 重新加载wifi驱动模块
sfwifi reset 重新启动wifi驱动相关模块
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/C151151/article/details/128419523

智能推荐

idea配置maven本地仓库路径失败_idea indexed maven本地仓库失败-程序员宅基地

文章浏览阅读2k次。当我们设置这个maven路径的时候我们有时候会设置失效,搞得自己很多时间浪费在这个上面_idea indexed maven本地仓库失败

802.1ad Provider Bridges 学习笔记_802.1ad provide bridge-程序员宅基地

文章浏览阅读1.6w次。相关协议1) 802.1Q Virtual Bridged Local Area Networks2) 802.1ad Provider Bridges A Bridge can be logically subdivided into the following components:• S-VLAN component• C-VLAN componentBridge_802.1ad provide bridge

linux系统下的各种串口调试工具_gtkterm local echo-程序员宅基地

文章浏览阅读920次。1.cutecomsudo apt-get install cutecomsudo cutecom图形化界面,可以手动选择接口,波特率一系列参数2.Gtktermsudo apt-get install gtktermsudo gtkterm类似cutecom,但是功能更加完善,图形化界面选择设置参数3.picocomsudo ap-get instal_gtkterm local echo

java日志需要知道的几件事(commons-logging,log4j,slf4j,logback)-程序员宅基地

文章浏览阅读1.8k次。一、 概念Commons-logging : apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC 的api 接口,具体的的JDBC driver 实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实现了一些简单日志方案。Log4j : 经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通

SonarQube权限控制_sonar权限控制,不登陆不允许查看-程序员宅基地

文章浏览阅读6.6k次。1.新建群组 管理员登陆,新建用户群组,手动将对应项目组用户添加至群组中。(注:LDAP用户需要登陆一次sonar.midea.com之后才可在sonar中搜索到) 2.新建权限模板 在新建权限模板时需要指定过滤条件,比如项目以C4A开头,就在过滤条件中添加C4A.*,下次新建的项目就会根据此过滤条件自动加入4A-Group。 访问 用对应权限账号登陆,即可看到属于自己群组的项目。_sonar权限控制,不登陆不允许查看

TypeError: token.type.endsWith is not a function vue eslint 问题解决-程序员宅基地

文章浏览阅读1.7w次,点赞13次,收藏9次。1. 问题原因今天用vue-cli搭建了一个脚手架 发现 let / await / async 关键字不能用会直接报错token.type.endsWith is not a functionasync / await 会报错,删除了就好了 let 也不好用 换成var就好用了 这就很奇怪2. 问题排查排查了很久发现是eslint的问题, 然后各种百度, 发现有个issue讨论过这个问题这是我之前的package.json{ "..._typeerror: token.type.endswith is not a function

随便推点

近百个Android优秀开源项目_android fbreaderj使用-程序员宅基地

文章浏览阅读1.5k次。FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb、ePub和fb2。此外还支持直接读取zip、tar和gzip等压缩文档。更多FBReaderJ信息 Angle Angle是一款专为Android平台设计的,适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用_android fbreaderj使用

MAC OSX下安装webpack遇到的问题及解决方法_mac电脑安装webpack但是 -v却显示没安装-程序员宅基地

文章浏览阅读385次。因为看的教程是在windows下运行的,我用命令“npm install webpack -g”直接安装会报错,提示“permission denied”,也就是权限不足于是在命令前添加“sudo“或者“sudo -s”使用root用户,仍提示权限不足经查询资料,使用sudo npm install webpack -g --unsafe-perm=true --allow-root可完成安装,此时使用webpack -v查询webpack版本会提示安装“CLI”,若输入yes会安装失败此时_mac电脑安装webpack但是 -v却显示没安装

使用新建模块(Model)的方式解决ns3的scratch中的脚本只能有一个cc文件的问题_scratch model-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏22次。需求用ns3复现一篇论文,在ns3-tutorial中,新建模拟脚本的方式是都是在scratch文件夹下创建新的cc文件,而且由于样例较为简单都是一个cc文件就可以完成模拟需求。而我所要复现的论文的算法相当复杂,不适合用单个cc文件保存所有代码。问题最初,尝试直接在scratch文件中创建多个.cc文件和.h文件相互引用,并以其中一个作为放置main函数的模拟入口文件。经测试发现,ns3的waf编译工具完全无法识别其中的引用关系,报未定义错误。因为,我们的目标为:找到一个方法,能够用多个相互引用的_scratch model

tp框架文件上传七牛服务器,TP5开发 - 七牛云图片上传方法-程序员宅基地

文章浏览阅读269次。1、config.php配置文件里配置七牛云密钥等里面 secretKey accessKey domain bucket对应换成自己七牛云申请的,步骤:(1)七牛云注册成功后—对象存储申请10G免费空间,(2)右上角个人中头像image.pngimage.png//配置文件return [// 文件上传默认驱动'UPLOAD_DRIVER' => 'Qiniu', //设置七牛上传驱动//..._lkqtp

Java工程师技术栈-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏8次。_java工程师技术栈

python爬取豆瓣电影Top250的信息-程序员宅基地

文章浏览阅读951次,点赞3次,收藏4次。python爬取豆瓣电影Top250的信息。初学,所以代码的不够美观和精炼。如果代码有错,请各位读者在评论区评论,以免误导其他同学。(可能也没多少人看)import requests#从bs4中导入BeautifulSoup模块from bs4 import BeautifulSoup#获取电影的名称(中文,外文,其他)def get_movies_name(): ...

推荐文章

热门文章

相关标签