贪睡的苏简 发表于 2021-4-6 23:42:52

工资爬取的案例

import requests
import bs4
import openpyxl
import re
import os
os.chdir('D:\BianCheng\Pythonwork\爬虫爬出来资料')

def open_url(url):
    headers = {
      "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
    res = requests.get(url, headers=headers)

    return res


def find_data(res):
    data = []
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    content = soup.find(class_="det-nr")                     #在 soup 中找 id="Cnt-Main-Article-QQ"
    target = content.find_all("p", style="text-indent:2em")    #在content 中找 'p' 标签中带style="TEXT-INDENT: 2em"的字符串并且变成迭代器
    for each in target:
      print(each.text)

    return data


# def to_excel(data):
#   wb = openpyxl.Workbook()
#   wb.guess_types = True
#   ws = wb.active
#   #工资表三件套
#
#   ws.append(['城市', '工资'])
#   for each in data:
#         ws.append(each)
#   #添加也要和第一行一样的是一个列表的形式添加
#
#   wb.save("2020年全国各地平均工资.xlsx")
#   #保存并命名


def main():
    url = "https://www.66law.cn/laws/490033.aspx"
    res = open_url(url)
    data = find_data(res)
    # to_excel(data)


if __name__ == "__main__":
    main()

控制台打印的是
D:\BianCheng\Python\python.exe D:/BianCheng/Pythonwork/NextPython/FishCWokeing/爬虫篇/text.py
平均工资,是一项反映工资总体水平的指标,指企业、事业、机关单位的职工在一定时期内平均每人所得的货币工资额。它不同于每一个人的具体工资水平。华律网小编为你收集整理了去年全国各地的平均工资,以及排名。
一、中国各城市平均工资排行榜
排名城市月均工资:元
1北京9240
2上海8962
3深圳8315
4广州7409
5杭州7330
6宁波7152
7佛山7017
8东莞6998
9厦门6886
10苏州6719
11南京6680
12重庆6584
13福州6522
14贵阳6437
15成都6402
16武汉6331
17南昌6235
18昆明6230
19南宁6197
20郑州6191
20长沙6186
21夭漳6178
23合肥6173
24大连6144
25无锡6095
26济南6067
27青岛6057
28石家庄5886
29西安5872
30沈阳5842
31太原5841
32烟台5765
33咍尔滨5659
34长春5332
此次主要排名了34个主要城市,在这34个城市中,平均工资排名前十的城市基本分布在长三角和珠三角地区。其中,北京、上海、深圳、广州、杭州依旧牢牢占据工资排名的前五名,平均工资水平较以往也有所提升。北京平均月资最高,为9240元。
沈阳、哈尔滨、长春作为东北三省省会,其工资水平在34个城市中排名靠后,尤其是哈尔滨和长春,排在最后两位,继续反映出东北地区经济发展面临困局。
二、城市平均工资怎么算?税前还是税后?
平均工资的统计一般指的是税前工资,而且不论是以货币形式的支付还是以实物形式支付的,均列入工资总额的计算范围,其次还包含了社保、公积金等,所以平均工资明显高于个人实际收入。
目前,中国社保由单位和员工个人共同缴纳,五项社保的具体缴费比例各地有所差别,但大致分别为养老保险:单位和个人分别缴纳个人工资的20%和8%,医疗保险:单位和个人分别缴纳约10%和2%,失业保险:单位和个人分别缴纳2%和1%,生育保险:单位缴纳约0.8%,个人不缴费,工伤保险:单位缴纳2%,个人不缴费。
公积金各单位缴存比例不一,以广州为例,单位及个人能的缴存比例可在5%-20%自行选择,每个单位原则上只能选定一个单位缴存比例,个人缴存比例应当等于或者高于单位缴存比例。
月平均工资计算公式:职工月平均工资=职工年平均工资/12个月。
哪个城市工资水平高?
北京。截至到去年,北京以人均年薪17.07万元稳居“最容易赚钱的城市”排行榜榜首。
(2)上海。截至到去年,上海以人均年薪15.50万元排名第二,中国最繁华大都市确实名不虚传。
(3)深圳。截至到去年,深圳以人均年薪15.43万元紧随其后排在全国第三,人人都说深圳遍地是黄金,果不其然。
(4)天津。截至到去年,天津以人均年薪14.5万元排在最容易赚钱的城市第四名。
(5)福州。截至到去年,福州人均年薪13.7万元排在全国最容易赚钱的城市第五名。不愧为福布斯中国大陆最佳商业城市百强城市。
(6)海口。截至到去年,海口人均年薪6.06万元排在中国最难赚钱城市第一名,如果你来旅游那么海口是个不错的选择,如果你来打工赚钱那么趁早回去吧。
(7)兰州。截至到去年,兰州人均年薪6.15万元排名中国最难赚钱城市第二名。
(8)汕头。截至到去年,汕头人均年薪6.49万元排名中国最难赚钱城市第三名。
(9)江阴。截至到去年,江阴人均年薪6.88万元排名中国最难赚钱城市第四名。
(10)哈尔滨。截至到去年,哈尔滨人均年薪7.28万元排名中国最难赚钱城市第五名。
以上就是华律网小编为你收集整理的去年我国各地平均工资的相关资料,希望能帮你清楚地了解到相关问题。若你还有其他相关问题需要小编为你解答的,可以在华律网上留言或者直接与华律网的律师进行联系以获得准确答案。

Process finished with exit code 0

而我需要的是
1北京9240
2上海8962
3深圳8315
4广州7409
5杭州7330
6宁波7152
7佛山7017
8东莞6998
9厦门6886
10苏州6719
11南京6680
12重庆6584
13福州6522
14贵阳6437
15成都6402
16武汉6331
17南昌6235
18昆明6230
19南宁6197
20郑州6191
20长沙6186
21夭漳6178
23合肥6173
24大连6144
25无锡6095
26济南6067
27青岛6057
28石家庄5886
29西安5872
30沈阳5842
31太原5841
32烟台5765
33咍尔滨5659
34长春5332
怎么去弄啊,弄了一天了{:10_285:}
希望大佬们可以帮忙解答一下,谢谢了

Daniel_Zhang 发表于 2021-4-7 01:13:55

本帖最后由 Daniel_Zhang 于 2021-4-7 01:18 编辑

r'<p style="text-indent:2em">(.+?</p>)'

试试这个正则?

里面会有一点杂质,自己筛一下 split 什么的

Daniel_Zhang 发表于 2021-4-7 01:28:41

Daniel_Zhang 发表于 2021-4-7 01:13
试试这个正则?

里面会有一点杂质,自己筛一下 split 什么的

split 去掉右尖括号,筛选得到的list

如果左尖括号在里面,就 split 去除

然后得到 list1,list1 就是你需要的

或者你对着给你的那个正则的结果,挨个进行正则处理,try-except 一下

贪睡的苏简 发表于 2021-4-7 09:12:38

Daniel_Zhang 发表于 2021-4-7 01:28
split 去掉右尖括号,筛选得到的list

如果左尖括号在里面,就 split 去除


我尝试一下,多谢大佬~

梦回连营 发表于 2021-4-7 21:20:37

本帖最后由 梦回连营 于 2021-4-7 21:21 编辑

我写了一个,打印出你想要的,持久化存储我就不去写了,你改改headers之后自己去持久化存储吧。
建议学学xpath,解析数据很好用的
主要它网页的源码写得比较乱。

贪睡的苏简 发表于 2021-4-7 21:39:32

梦回连营 发表于 2021-4-7 21:20
我写了一个,打印出你想要的,持久化存储我就不去写了,你改改headers之后自己去持久化存储吧。
建议学学x ...

哥,可以给一下代码不?
我想运行一下{:10_250:}
谢谢你~

梦回连营 发表于 2021-4-7 21:40:50

本帖最后由 梦回连营 于 2021-4-7 21:42 编辑

import requests
from lxml import etree

url = 'https://www.66law.cn/laws/490033.aspx'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68'
}
#获得源码
html = requests.get(url=url,headers = headers)
html.encoding = 'utf-8'
html_text = html.text
#xpath数据解析
tree = etree.HTML(html_text)
imf_list = []

for i in range(5,39):
    imf_list.append(tree.xpath('//div[@class="det-nr"]/p[{}]/text()'.format(i)))
    imf_list += (tree.xpath('//div[@class="det-nr"]/p[{}]/a/text()'.format(i)))
with open('平均工资表.txt' , 'a+' , encoding='utf-8') as fp:
    for i in imf_list:
      if len(i) == 1:
            fp.write(i + '\n')
      else:
            fp.write('{}{}{}'.format(i,i,i) + '\n')

不知道你有没有lxml这个包,没有得先安装
成功了给个最佳答案啊-_-

梦回连营 发表于 2021-4-7 21:44:38

梦回连营 发表于 2021-4-7 21:40
import requests
from lxml import etree



这个是我后面修改的,直接写到TXT文件里面去了

贪睡的苏简 发表于 2021-4-7 21:54:29

梦回连营 发表于 2021-4-7 21:40
import requests
from lxml import etree



我试一下,谢谢了哥

liwei_kuma 发表于 2021-4-8 10:45:43

试试这个
import requests
import parsel

url='https://www.66law.cn/laws/490033.aspx'
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
res=requests.get(url,headers=headers)
print(res.status_code)
sel=parsel.Selector(res.text)
for i in range(5,39):
    data=sel.xpath(f'//div[@class="det-nr"]/p[{i}]//text()').getall()
    if len(data)==1:
      print(data)
    else:
      print(''.join(data))

贪睡的苏简 发表于 2021-4-8 12:07:14

liwei_kuma 发表于 2021-4-8 10:45
试试这个

也运行到了,是我想要的结果,多谢大佬解救{:10_298:}
页: [1]
查看完整版本: 工资爬取的案例