标题: 【已解决】100元求助,获取网页地区及数据处理 [打印本页]
作者: 曾经的你 时间: 2023-12-19 14:23 标题: 【已解决】100元求助,获取网页地区及数据处理
本帖最后由 曾经的你 于 2023-12-20 18:37 编辑
全国行政区划:https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html
按照网页显示的地区顺序,获取所有地区名称。并无线向下穿透,获取到***委员会的上一级。
比如北京:
北京-市辖区-东城区-东华门街道
【第一种处理方式】
获取这些地区数据的所有拼音,储存在xls表中。分为AB两列。
地区名 地区拼音
北京市 beijingshi
【第二种处理方式】
获取这些地区数据的所有拼音首字母,储存在xls表中。分为AB两列。
地区名 地区拼音
北京市 bjs
能接单的老哥可回复,先行付款。
最后更新(2023年12月20日18:37:10)
因我的问题造成了2个老哥都给出了结果,我已全部支付100元。
感谢。
作者: buyiyang 时间: 2023-12-19 20:51
用python比较方便- import requests
- import time
- from bs4 import BeautifulSoup
- from urllib.parse import urljoin
- from pypinyin import pinyin, lazy_pinyin, Style
-
- def get_lower_pinyin(string):
- pinyin_list = lazy_pinyin(string, style=Style.NORMAL)
- lower_pinyin = ''.join(pinyin_list)
- return lower_pinyin
-
- def get_link_text(url):
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
- }
- response = requests.get(url, headers=headers)
- if response.status_code == 200:
- response.encoding = 'UTF8' # Set the correct encoding
- html = response.text
- soup = BeautifulSoup(html, 'html.parser')
- td_elements = soup.find_all('td')
- for td in td_elements:
- if td.find('a') and not td.attrs:
- links = td.find_all('a')
- for link in links:
- link_text = link.get_text()
- if not link_text.isdigit():
- absolute_url = urljoin(url, link['href'])
- print(link_text)
- with open(file_path, 'a') as file:
- file.write(link_text+","+get_lower_pinyin(link_text)+"\n")
- time.sleep(0.5)
- get_link_text(absolute_url)
-
- url = "https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/"
- file_path = r"r:\2.csv"
- get_link_text(url)
复制代码
作者: zaqmlp 时间: 2023-12-19 20:57
代码存为bat,win10/11系统运行,爬取太快会限制- <# :
- cls&echo off&cd /d "%~dp0"&rem bat存为ANSI/GB2312编码
- path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
- set "current=%cd%"
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
- pause
- exit
- #>
- $current=($env:current).trimend('\');
- $rooturl='https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html';
- $outfile=$current+'\结果.csv';
-
- $pyfile=$current+'\py.txt';
- if(-not (test-path -literal $pyfile)){
- Invoke-WebRequest -Uri 'https://csstools.chinaz.com/tools/js/pinyin.js' -OutFile $pyfile;
- }
- $enc=[System.Text.Encoding]::UTF8;
- $text=[IO.File]::ReadAllText($pyfile, $enc);
- $pydic=New-Object 'System.Collections.Generic.Dictionary[string, string]';
- $m=[regex]::match($text, 'var pydic ?= ?"([^"]+)"');
- if($m.success){
- $arr=$m.groups[1].value.trimend(',').split(',');
- for($i=0;$i -lt $arr.length;$i++){
- $han=$arr[$i].Substring(0,1);
- $py=((((($arr[$i].Substring(1) -replace '[āáǎà]','a') -replace '[ōóǒò]','o') -replace '[ēéěè]','e') -replace '[īíǐì]','i') -replace '[ūúǔù]','u') -replace '[üǖǘǚǜ]','v';
- if($py.length -le 1){$py=$py.toUpper();}else{$py=$py.Substring(0,1).toUpper()+$py.Substring(1);}
- $pydic.add($han, $py);
- }
- }
-
-
- $fs=New-Object System.IO.FileStream($outfile, [System.IO.FileMode]::Create);
- $sw=New-Object System.IO.StreamWriter($fs, [Text.Encoding]::GetEncoding('GB2312'));
-
- function hantopy($h, $s){
- $brr=New-Object -TypeName System.Collections.ArrayList;
- for($i=0;$i -lt $h.length;$i++){
- $char=$h.Substring($i, 1);
- if($pydic.ContainsKey($char)){
- if($s -eq 1){
- [void]$brr.add($pydic[$char]);
- }else{
- [void]$brr.add($pydic[$char].Substring(0, 1));
- }
- }else{
- [void]$brr.add($char);
- }
- }
- return ($brr -join '');
- }
-
- function gethtml($u){
- $t='';
- $ua='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0';
- for($j=1;$j -le 10;$j++){
- try{
- $req=Invoke-WebRequest -UseBasicParsing -Uri $u -TimeoutSec 8 -UserAgent $ua;
- if($req.StatusCode -eq 200){
- [byte[]] $bytes=[Text.Encoding]::GetEncoding('ISO-8859-1').GetBytes($req.Content);
- $t=[Text.Encoding]::GetEncoding('UTF-8').GetString($bytes)
- break;
- }
- }catch{
- write-host ('第'+$j.ToString()+'次获取网页内容失败');
- start-sleep -Seconds 10;
- }
- }
- start-sleep -Seconds 5;
- return $t;
- }
-
- function geturl($html, $url){
- $from=$url -replace '[^//]+$','';
- $m1=[regex]::matches($html, '<tr class="(provincetr|citytr|countytr|towntr|villagetr)"[^>]*?>([\s\S]+?)</tr>');
- if($m1.count -ge 1){
- for($i=0;$i -lt $m1.count;$i++){
- $m2=[regex]::matches($m1[$i].groups[2].value, '<td(?: [^>]+?)?>(.+?)</td>');
- if($m2.count -ge 1){
- if($m1[$i].groups[1].value -eq 'provincetr'){
- for($j=0;$j -lt $m2.count;$j++){
- $item=@{
- 'code1'='';
- 'code2'='';
- 'url'='';
- 'name'='';
- 'pinyin1'='';
- 'pinyin2'=''
- };
- $m3=[regex]::match($m2[$j].groups[1].value, '<a href="([^"]+?)"[^>]*?>([\s\S]+?)</a>');
- if($m3.Success){
- $item['url']=$from+$m3.groups[1].value;
- $item['name']=($m3.groups[2].value -replace '<[^>]+?>','').trim();
- $item['pinyin1']=hantopy $item['name'] 1;
- $item['pinyin2']=hantopy $item['name'] 2;
- }
- write-host $item['name'];
- $line="'"+$item['code1']+','+$item['name']+','+$item['pinyin1']+','+$item['pinyin2'];
- $sw.WriteLine($line);
- $sw.Flush();
- if($item['url'] -ne ''){
- geturl (gethtml $item['url']) $item['url'];
- }
- }
- }else{
- $item=@{
- 'code1'='';
- 'code2'='';
- 'url'='';
- 'name'='';
- 'pinyin1'='';
- 'pinyin2'=''
- };
- if($m1[$i].groups[1].value -eq 'villagetr'){
- $item['code1']=($m2[0].groups[1].value -replace '<[^>]+?>','').trim();
- $item['code2']=($m2[1].groups[1].value -replace '<[^>]+?>','').trim();
- $item['name']=($m2[2].groups[1].value -replace '<[^>]+?>','').trim();
- }else{
- $item['code1']=($m2[0].groups[1].value -replace '<[^>]+?>','').trim();
- $item['name']=($m2[1].groups[1].value -replace '<[^>]+?>','').trim();
- $m3=[regex]::match($m2[1].groups[1].value, '<a href="([^"]+?)"[^>]*?>([\s\S]+?)</a>');
- if($m3.Success){
- $item['url']=$from+$m3.groups[1].value;
- }
- }
- $item['pinyin1']=hantopy $item['name'] 1;
- $item['pinyin2']=hantopy $item['name'] 2;
- write-host $item['name'];
- $line="'"+$item['code1']+','+$item['name']+','+$item['pinyin1']+','+$item['pinyin2'];
- $sw.WriteLine($line);
- $sw.Flush();
- if($item['url'] -ne ''){
- if($m1[$i].groups[1].value -notmatch '(towntr|villagetr)'){
- geturl (gethtml $item['url']) $item['url'];
- }
- }
- }
- }
- }
- }
- }
- #$rooturl='https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/11/01/110102.html'
- geturl (gethtml $rooturl) $rooturl;
- $sw.Close();
- $fs.Close();
- exit;
复制代码
作者: 曾经的你 时间: 2023-12-19 23:13
本帖最后由 曾经的你 于 2023-12-19 23:58 编辑
回复 3# zaqmlp
感谢老哥,在我这运行失败。我根据gpt的提示,将错误更正后运行,出现了结果。
但是依然存在问题:a、全拼拼音无需带声调 b、在运行中有报错
可否直接将2个结果文件,分享一个链接给我。
作者: 曾经的你 时间: 2023-12-19 23:37
本帖最后由 曾经的你 于 2023-12-19 23:52 编辑
回复 2# buyiyang
感谢老哥回复,已经安装各种依赖,运行后,报错。
【还有另外一个老哥的回复,他的已经出现了结果,我将以他的跟进,感谢!】
作者: buyiyang 时间: 2023-12-20 00:01
https://pan.baidu.com/s/1MPrNXYHGcxRn0Q1fF1p8ow?pwd=s9wi
作者: 曾经的你 时间: 2023-12-20 03:13
回复 6# buyiyang
感谢,发个支付宝二维码
作者: 曾经的你 时间: 2023-12-20 03:14
回复 3# zaqmlp
另一个老哥已经提供了数据,我采纳了它的回复。
感谢。
作者: zaqmlp 时间: 2023-12-20 03:35
回复 4# 曾经的你
链接: https://pan.baidu.com/s/147J8ycl9FQJhYPU9-YxHjw?pwd=g84x
我测试一切正常,你说的问题都没出现,而且你这样反馈问题毫无意义,没有截图,没有贴出报错信息,也没有标明或贴出你的修改
另外请按有偿发帖规则贴出你的及时联系方式,或者按回答者提供的联系方式去及时反馈,不然你这样只会浪费别人的时间,让人失去热情
作者: buyiyang 时间: 2023-12-20 17:11
已在6楼网盘链接中更新
作者: 曾经的你 时间: 2023-12-20 18:34
回复 10# buyiyang
已经支付
作者: 曾经的你 时间: 2023-12-20 18:36
回复 9# zaqmlp
感谢建议,我已经采取了另外一个老哥的结果,已经向他支付了100,但是我也向你支付100,收到请回复。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |