python爬取网页表格数据匹配_爬取表格类网站数据并保存为excel文件

news/2024/5/9 20:03:45/文章来源:https://blog.csdn.net/weixin_39800062/article/details/110315361

本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html

主要学习的地方:

1.分析网站的ajax请求信息

2.构造参数

3.发起请求后处理获得的数据

4.保存表格

重点:分析表格类网站的ajax请求,以及如何保存这类信息(关于表格方面的)

通过分析网址 JavaScript 请求,以比 Selenium 快 100 倍的方法,快速爬取东方财富网各上市公司历年的财务报表数据。

摘要: 上一篇文章,我们用Selenium成功爬取了东方财富网的财务报表数据,但是速度非常慢,爬取 70 页需要好几十分钟。为了加快速度,本文分析网页JavaScript请求,找到数据接口然后快速爬取财务报表数据。

1. JavaScript请求分析

90719379.jpg

接下来,我们深入分析。首先,点击报表底部的下一页,然后观察左侧Name列,看会弹出什么新的请求来:

136165.jpg

可以看到,当不断点击下一页时,会相应弹出以get?type开头的请求。点击右边Headers选项卡,可以看到请求的URL,网址非常长,先不管它,后续我们会分析各项参数。接着,点击右侧的Preview和Response,可以看到里面有很多整齐的数据,尝试猜测这可能是财务报表中的数据,经过和表格进行对比,发现这正是我们所需的数据,太好了。

Fpsj517KOZ63Z-9vrzIYjgLyfS80

然后将URL复制到新链接中打开看看,可以看到表格中的数据完美地显示出来了。竟然不用添加Headers、UA去请求就能获取到,看来东方财富网很大方啊。

Fjn2ZLvaUCdam1U-2RDk_N17zGOy

到这里,爬取思路已经很清晰了。首先,用Request请求该URL,将获取到的数据进行正则匹配,将数据转变为json格式,然后写入本地文件,最后再加一个分页循环爬取就OK了。这比之前的Selenium要简单很多,而且速度应该会快很多倍。下面我们就先来尝试爬一页数据看看。

2. 爬取单页

2.1. 抓取分析

下面,我们通过分析该url,来抓取表格内容。

import requests

def get_table():

params = {

'type': 'CWBB_LRB', # 表格类型,LRB为利润表缩写,必须

'token': '70f12f2f4f091e459a279469fe49eca5', # 访问令牌,必须

'st': 'noticedate', # 公告日期

'sr': -1, # 保持-1不用改动即可

'p': 1, # 表格页数

'ps': 50, # 每页显示多少条信息

'js': 'var LFtlXDqn={pages:(tp),data: (x)}', # js函数,必须

'filter': '(reportdate=^2018-06-30^)', # 筛选条件

# 'rt': 51294261 可不用

}

url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?'

response = requests.get(url, params=params).text

print(response)

get_table()

这里我们定义了一个get_table()方法,来输出抓取的第一页表格内容。params为url请求中所包含的参数。

这里对重要参数进行简单说明:type为7个表格的类型说明,将type拆成两部分:’CWBB_‘ 和’LRB’,资产负债表等后3个表是以’CWBB_’ 开头,业绩报表至预约披露时间表等前4个表是以’YJBB20_‘开头的;’LRB’为利润表的首字母缩写,同理业绩报表则为’YJBB’。所以,如果要爬取不同的表格,就需要更改type参数。’filter’为表格筛选参数,这里筛选出年中报的数据。不同的表格筛选条件会不一样,所以当type类型更改的时候,也要相应修改filter类型。

params参数设置好之后,将url和params参数一起传进requests.get()方法中,这样就构造好了请求连接。几行代码就可以成功获取网页第一页的表格数据了:

FiX9K5Z5Y_Hue7c16dZaXZ_IpQ5O

可以看到,表格信息存储在LFtlXDqn变量中,pages表示表格有72页。data为表格数据,是一个由多个字典构成的列表,每个字典是表格的一行数据。我们可以通过正则表达式分别提取出pages和data数据。

2.2. 正则表达式提取表格

# 确定页数

import re

pat = re.compile('var.*?{pages:(\d+),data:.*?')

page_all = re.search(pat, response)

print(page_all.group(1))

结果:

72

这里用\d+匹配页数中的数值,然后用re.search()方法提取出来。group(1)表示输出第一个结果,这里就是()中的页数。

# 提取出list,可以使用json.dumps和json.loads

import json

pattern = re.compile('var.*?data: (.*)}', re.S)

items = re.search(pattern, response)

data = items.group(1)

print(data)

print(type(data))

结果如下:

[{'scode': '600478', 'hycode': '016040', 'companycode': '10001305', 'sname': '科力远', 'publishname': '材料行业'...

'sjltz': 10.466665, 'kcfjcxsyjlr': 46691230.93, 'sjlktz': 10.4666649042, 'eutime': '2018/9/6 20:18:42', 'yyzc': 14238766.31}]

这里在匹配表格数据用了(.*)表示贪婪匹配,因为data中有很多个字典,每个字典都是以’}’结尾,所以我们利用贪婪匹配到最后一个’}’,这样才能获取data所有数据。多数情况下,我们可能会用到(.*?),这表示非贪婪匹配,意味着之多匹配一个’}’,这样的话,我们只能匹配到第一行数据,显然是不对的。

2.3. json.loads()输出表格

这里提取出来的list是str字符型的,我们需要转换为list列表类型。为什么要转换为list类型呢,因为无法用操作list的方法去操作str,比如list切片。转换为list后,我们可以对list进行切片,比如data[0]可以获取第一个{}中的数据,也就是表格第一行,这样方便后续构造循环从而逐行输出表格数据。这里采用json.loads()方法将str转换为list。

data = json.loads(data)

# print(data) 和上面的一样

print(type(data))

print(data[0])

结果如下:

{'scode': '600478', 'hycode': '016040', 'companycode': '10001305', 'sname': '科力远', 'publishname': '材料行业', 'reporttimetypecode': '002', 'combinetypecode': '001', 'dataajusttype': '2', 'mkt': 'shzb', 'noticedate': '2018-10-13T00:00:00', 'reportdate': '2018-06-30T00:00:00', 'parentnetprofit': -46515200.15, 'totaloperatereve': 683459458.22, 'totaloperateexp': 824933386.17, 'totaloperateexp_tb': -0.0597570689015973, 'operateexp': 601335611.67, 'operateexp_tb': -0.105421872593886, 'saleexp': 27004422.05, 'manageexp': 141680603.83, 'financeexp': 33258589.95, 'operateprofit': -94535963.65, 'sumprofit': -92632216.61, 'incometax': -8809471.54, 'operatereve': '-', 'intnreve': '-', 'intnreve_tb': '-', 'commnreve': '-', 'commnreve_tb': '-', 'operatetax': 7777267.21, 'operatemanageexp': '-', 'commreve_commexp': '-', 'intreve_intexp': '-', 'premiumearned': '-', 'premiumearned_tb': '-', 'investincome': '-', 'surrenderpremium': '-', 'indemnityexp': '-', 'tystz': -0.092852, 'yltz': 0.178351, 'sjltz': 0.399524, 'kcfjcxsyjlr': -58082725.17, 'sjlktz': 0.2475682609, 'eutime': '2018/10/12 21:01:36', 'yyzc': 601335611.67}

接下来我们就将表格内容输入到csv文件中。

# 写入csv文件

import csv

for d in data:

with open('eastmoney.csv', 'a', encoding='utf_8_sig', newline='') as f:

w = csv.writer(f)

w.writerow(d.values())

通过for循环,依次取出表格中的每一行字典数据{},然后用with…open的方法写入’eastmoney.csv’文件中。

tips:’a’表示可重复写入;encoding=’utf_8_sig’ 能保持csv文件的汉字不会乱码;newline为空能避免每行数据中产生空行。

这样,第一页50行的表格数据就成功输出到csv文件中去了:

Fn4lk33DpaNp2SyAK2HB5_IaKClv

这里,我们还可以在输出表格之前添加上表头:

# 添加列标题

def write_header(data):

with open('eastmoney.csv', 'a', encoding='utf_8_sig', newline='') as f:

headers = list(data[0].keys())

print(headers)

print(len(headers)) # 输出list长度,也就是有多少列

writer = csv.writer(f)

writer.writerow(headers)

这里,data[0]表示list的一个字典中的数据,data[0].keys()表示获取字典中的key键值,也就是列标题。外面再加一个list序列化(结果如下),然后将该list输出到’eastmoney.csv’中作为表格的列标题即可。

['scode', 'hycode', 'companycode', 'sname', 'publishname', 'reporttimetypecode', 'combinetypecode', 'dataajusttype', 'mkt', 'noticedate', 'reportdate', 'parentnetprofit', 'totaloperatereve', 'totaloperateexp', 'totaloperateexp_tb', 'operateexp', 'operateexp_tb', 'saleexp', 'manageexp', 'financeexp', 'operateprofit', 'sumprofit', 'incometax', 'operatereve', 'intnreve', 'intnreve_tb', 'commnreve', 'commnreve_tb', 'operatetax', 'operatemanageexp', 'commreve_commexp', 'intreve_intexp', 'premiumearned', 'premiumearned_tb', 'investincome', 'surrenderpremium', 'indemnityexp', 'tystz', 'yltz', 'sjltz', 'kcfjcxsyjlr', 'sjlktz', 'eutime', 'yyzc']

44 # 一共有44个字段,也就是说表格有44列。

FktoPi6Qd0WRm8soOZNY6L5LByHf

以上,就完成了单页表格的爬取和下载到本地的过程。

3. 多页表格爬取

将上述代码整理为相应的函数,再添加for循环,仅50行代码就可以爬取72页的利润报表数据:

import requests

import re

import json

import csv

import time

def get_table(page):

params = {

'type': 'CWBB_LRB', # 表格类型,LRB为利润表缩写,必须

'token': '70f12f2f4f091e459a279469fe49eca5', # 访问令牌,必须

'st': 'noticedate', # 公告日期

'sr': -1, # 保持-1不用改动即可

'p': page, # 表格页数

'ps': 50, # 每页显示多少条信息

'js': 'var LFtlXDqn={pages:(tp),data: (x)}', # js函数,必须

'filter': '(reportdate=^2018-06-30^)', # 筛选条件,如果不选则默认下载全部时期的数据

# 'rt': 51294261 可不用

}

url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?'

response = requests.get(url, params=params).text

# 确定页数

pat = re.compile('var.*?{pages:(\d+),data:.*?')

page_all = re.search(pat, response) # 总页数

pattern = re.compile('var.*?data: (.*)}', re.S)

items = re.search(pattern, response)

data = items.group(1)

data = json.loads(data)

print('\n正在下载第 %s 页表格' % page)

return page_all,data

def write_header(data):

with open('eastmoney.csv', 'a', encoding='utf_8_sig', newline='') as f:

headers = list(data[0].keys())

writer = csv.writer(f)

writer.writerow(headers)

def write_table(data):

for d in data:

with open('eastmoney.csv', 'a', encoding='utf_8_sig', newline='') as f:

w = csv.writer(f)

w.writerow(d.values())

def main(page):

data = get_table(page)

write_table(data)

if __name__ == '__main__':

start_time = time.time() # 下载开始时间

# 写入表头

write_header(get_table(1))

page_all = get_table(1)[0]

page_all = int(page_all.group(1))

for page in range(1, page_all):

main(page)

end_time = time.time() - start_time # 结束时间

print('下载用时: {:.1f} s' .format(end_time))

整个下载只用了20多秒,而之前用selenium花了几十分钟,这效率提升了足有100倍!

Fs-EixHunxcirWSlKPZhF_A1Ariu

这里,如果我们想下载全部时期(从2007年-2018年)利润报表数据,也很简单。只要将type中的filter参数注释掉,意味着也就是不筛选日期,那么就可以下载全部时期的数据。这里当我们取消注释filter列,将会发现总页数page_all会从2018年中报的72页增加到2528页,全部下载完成后,表格有超过12万行的数据。基于这些数据,可以尝试从中进行一些有价值的数据分析。

FuP6aIzr6A7c52EgxAvGiptpoeCX

4. 通用代码构造

以上代码实现了2018年中报利润报表的爬取,但如果不想局限于该报表,还想爬取其他报表或者其他任意时期的数据,那么就需要手动地去修改代码中相应的字段,很不方便。所以上面的代码可以说是简短但不够强大。

为了能够灵活实现爬取任意类别和任意时期的报表数据,需要对代码再进行一些加工,就可以构造出通用强大的爬虫程序了。

"""

e.g: http://data.eastmoney.com/bbsj/201806/lrb.html

"""

import requests

import re

from multiprocessing import Pool

import json

import csv

import pandas as pd

import os

import time

# 设置文件保存在D盘eastmoney文件夹下

file_path = 'D:\\eastmoney'

if not os.path.exists(file_path):

os.mkdir(file_path)

os.chdir(file_path)

# 1 设置表格爬取时期、类别

def set_table():

print('*' * 80)

print('\t\t\t\t东方财富网报表下载')

print('作者:高级农民工 2018.10.10')

print('--------------')

year = int(float(input('请输入要查询的年份(四位数2007-2018):\n')))

# int表示取整,里面加float是因为输入的是str,直接int会报错,float则不会

# https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10

while (year < 2007 or year > 2018):

year = int(float(input('年份数值输入错误,请重新输入:\n')))

quarter = int(float(input('请输入小写数字季度(1:1季报,2-年中报,3:3季报,4-年报):\n')))

while (quarter < 1 or quarter > 4):

quarter = int(float(input('季度数值输入错误,请重新输入:\n')))

# 转换为所需的quarter 两种方法,2表示两位数,0表示不满2位用0补充,

# http://www.runoob.com/python/att-string-format.html

quarter = '{:02d}'.format(quarter * 3)

# quarter = '%02d' %(int(month)*3)

# 确定季度所对应的最后一天是30还是31号

if (quarter == '06') or (quarter == '09'):

day = 30

else:

day = 31

date = '{}-{}-{}' .format(year, quarter, day)

# print('date:', date) # 测试日期 ok

# 2 设置财务报表种类

tables = int(

input('请输入查询的报表种类对应的数字(1-业绩报表;2-业绩快报表:3-业绩预告表;4-预约披露时间表;5-资产负债表;6-利润表;7-现金流量表): \n'))

dict_tables = {1: '业绩报表', 2: '业绩快报表', 3: '业绩预告表',

4: '预约披露时间表', 5: '资产负债表', 6: '利润表', 7: '现金流量表'}

dict = {1: 'YJBB', 2: 'YJKB', 3: 'YJYG',

4: 'YYPL', 5: 'ZCFZB', 6: 'LRB', 7: 'XJLLB'}

category = dict[tables]

# js请求参数里的type,第1-4个表的前缀是'YJBB20_',后3个表是'CWBB_'

# 设置set_table()中的type、st、sr、filter参数

if tables == 1:

category_type = 'YJBB20_'

st = 'latestnoticedate'

sr = -1

filter = "(securitytypecode in ('058001001','058001002'))(reportdate=^%s^)" %(date)

elif tables == 2:

category_type = 'YJBB20_'

st = 'ldate'

sr = -1

filter = "(securitytypecode in ('058001001','058001002'))(rdate=^%s^)" %(date)

elif tables == 3:

category_type = 'YJBB20_'

st = 'ndate'

sr = -1

filter=" (IsLatest='T')(enddate=^2018-06-30^)"

elif tables == 4:

category_type = 'YJBB20_'

st = 'frdate'

sr = 1

filter = "(securitytypecode ='058001001')(reportdate=^%s^)" %(date)

else:category_type = 'CWBB_' st = 'noticedate' sr = -1 filter = '(reportdate=^%s^)' % (date) category_type = category_type + category # print(category_type) # 设置set_table()中的filter参数 yield{ 'date':date, 'category':dict_tables[tables], 'category_type':category_type, 'st':st, 'sr':sr, 'filter':filter }# 2 设置表格爬取起始页数def page_choose(page_all): # 选择爬取页数范围 start_page = int(input('请输入下载起始页数:\n')) nums = input('请输入要下载的页数,(若需下载全部则按回车):\n') print('*' * 80) # 判断输入的是数值还是回车空格 if nums.isdigit(): end_page = start_page + int(nums) elif nums == '': end_page = int(page_all.group(1)) else: print('页数输入错误') # 返回所需的起始页数,供后续程序调用 yield{ 'start_page': start_page, 'end_page': end_page }# 3 表格正式爬取def get_table(date, category_type,st,sr,filter,page): # 参数设置 params = { # 'type': 'CWBB_LRB', 'type': category_type, # 表格类型 'token': '70f12f2f4f091e459a279469fe49eca5', 'st': st, 'sr': sr, 'p': page, 'ps': 50, # 每页显示多少条信息 'js': 'var LFtlXDqn={pages:(tp),data: (x)}', 'filter': filter, # 'rt': 51294261 可不用 } url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?' response = requests.get(url, params=params).text # 确定页数 pat = re.compile('var.*?{pages:(\d+),data:.*?') page_all = re.search(pat, response) # print(page_all.group(1)) # ok # 提取出list,可以使用json.dumps和json.loads pattern = re.compile('var.*?data: (.*)}', re.S) items = re.search(pattern, response) # 等价于 # items = re.findall(pattern,response) # print(items[0]) data = items.group(1) data = json.loads(data) return page_all, data,page# 4 写入表头# 方法1 借助csv包,最常用def write_header(data,category): with open('{}.csv' .format(category), 'a', encoding='utf_8_sig', newline='') as f: headers = list(data[0].keys()) # print(headers) # 测试 ok writer = csv.writer(f) writer.writerow(headers)# 5 写入表格def write_table(data,page,category): print('\n正在下载第 %s 页表格' % page) # 写入文件方法1 for d in data: with open('{}.csv' .format(category), 'a', encoding='utf_8_sig', newline='') as f: w = csv.writer(f) w.writerow(d.values())def main(date, category_type,st,sr,filter,page): func = get_table(date, category_type,st,sr,filter,page) data = func[1] page = func[2] write_table(data,page,category)if __name__ == '__main__': # 获取总页数,确定起始爬取页数 for i in set_table(): date = i.get('date') category = i.get('category') category_type = i.get('category_type') st = i.get('st') sr = i.get('sr') filter = i.get('filter') constant = get_table(date,category_type,st,sr,filter, 1) page_all = constant[0] for i in page_choose(page_all): start_page = i.get('start_page') end_page = i.get('end_page') # 先写入表头 write_header(constant[1],category) start_time = time.time() # 下载开始时间 # 爬取表格主程序 for page in range(start_page, end_page): main(date,category_type,st,sr,filter, page) end_time = time.time() - start_time # 结束时间 print('下载完成') print('下载用时: {:.1f} s' .format(end_time))

以爬取2018年中业绩报表为例,感受一下比selenium快得多的爬取效果(视频链接):

利用上面的程序,我们可以下载任意时期和任意报表的数据。这里,我下载完成了2018年中报所有7个报表的数据。

文中代码和素材资源可以在下面的链接中获取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_765781.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 实时监测网站是否异常_搭建一个网站监测程序uptime-status搭建,异常邮箱提醒图文教程...

最近hostloc的大佬发布一款用于监测网站运行状态的源码&#xff0c;使用的是基于UptimeRobot网站的API keyUptimeRobot免费版可以自行添加50个网站的监控&#xff0c;每五分钟进行一次测试&#xff0c;具体的可以前往官网查询&#xff1b;演示&#xff1a;https://wp.4545456.x…

php动态网站开发论文,浅谈《基于PHP的动态网站开发》课程的项目案例设计

电子论文浅谈《基于PHP的动态网站开发》课程的项目案例设计时间&#xff1a;2020年05月25日 所属分类&#xff1a;电子论文 点击次数&#xff1a;【摘要】在教学资源建设中&#xff0c;案例设计建设是非常重要的资源之一。运用一套好的教学案例&#xff0c;就要使用工人使用一个…

mac设置windows文件服务器,mac和windows怎样互传文件?_网站服务器运转保护

mac和windows互传文件的要领&#xff1a;起首确认两台电脑都连接到同个收集&#xff1b;然后在Windows体系中&#xff0c;顺次点击【收集与Internet-收集与同享中间-变动高等同享设置-启用文件和打印机同享】&#xff1b;末了在macOS体系中&#xff0c;翻开Finder即可。mac和wi…

这几个私藏的在线工具网站!真是相见恨晚!让码农彻底解放双手!

作者 l 突围的鱼来源 l 码农突围&#xff08;ID&#xff1a;smartyuge&#xff09;大家好&#xff0c;我是鱼哥&#xff0c;一个一直在突围的码农。最近很多小伙伴问&#xff0c;鱼哥平时有没有些私密收藏的工具网站&#xff0c;这个鱼哥豪不夸张的说&#xff0c;积累资源和工具…

好起来了!程序员副业接私活网站分享~

来源&#xff1a;网络1、程序员客栈&#xff1a;程序员的经纪人2、快码众包-让互联网产品开发更快速3、开源中国众包平台 oschina众包4、Coding 码市 - 云技术众包平台5、我爱方案网-电子方案开发&#xff0c;供应链平台6、码易-高质量软件众包交付服务平台7、人人开发 -让管理…

从零到一快速搭建个人博客网站(域名备案 + https免费证书)

作者&#xff1a;yangwqonlycnblogs.com/winkin/p/14135677.html前言 为什么选择搭建个人博客&#xff1f;一方面是各个平台经常下架原创文章&#xff0c;另一个方面是为了熟悉整个建站流程。通过搭建个人博客&#xff0c;我们可以自由的发表文章不用担心下架&#xff0c;而且可…

推荐awstats网站分析器,很强大

AWStats简单介绍 AWStats是在Sourcefroge上发展很快的一个基于perl的web日志分析工具。与其他工具相比&#xff0c;其优势在于 1. 界面友好&#xff0c;可以根据浏览器直接调用相应的语言界面&#xff08;支持中文&#xff09;&#xff1b; 2.基于perl&#xff0c;并且很好的…

传统网站性能优化的三种手段

对于技术人而言&#xff0c;性能优化是一个亘古不变的话题。而随着框架、语言、库等工具的不断演进&#xff0c;传统的优化手段是否仍然适用&#xff1f;在创新的环境之下&#xff0c;又有哪些较为捷径的优化手段&#xff1f;在本文中&#xff0c;作者将以一年前的网站为测试对…

python登录脚本_python requests库登录网站脚本 登录失败

想写一个自动登录脚本&#xff0c;拿V2EX做实验。首先分析了下登录提交的表单&#xff1a;需要分析登陆界面中的html取出next,once,next值&#xff0c;分别为input_next_value_pre、input_once_value、input_next_value_post, 然后用requests请求页面&#xff0c;主要代码如下&…

的后台表_用逐浪CMS做的网站后台密码忘记如何重置

问&#xff1a;用逐浪CMS做的网站后台密码忘记了 进不去后台&#xff0c;&#xff0c;现在怎么办啊&#xff1f;答&#xff1a;连接数据库&#xff0c;打开数据库&#xff0c;进入表管理&#xff0c;找到ZL_Manager表&#xff0c;打开。找到您要修改的用户名&#xff0c;如admi…

seo 伪原创_SEO优化时如何写好一篇伪原创文章

首先伪原创文章是为了照顾搜索引擎&#xff0c;目标是奔着原创文章&#xff0c;大多数读者应该都是这两个基本原则了&#xff0c;而产生伪原创这个概念是因为站长们忙或者是对网站内容补充数量要求比较高而又有这希望能借助一些热门的关键词或者重要的指数关键词来提高网站权重…

网站底部运行时间的php代码,wordpress主题网站不用插件显示网站运行时间php源码教程...

介绍&#xff1a;wordpess用插件可以实现网站显示网站运行时间&#xff0c;但是插件始终会拖慢一些网站速度。经过百度终于找到一些好用的显示时间源码&#xff0c;本站使用的是第一种显示方式。下面奉上显示网站运行时间的php源码和添加教程&#xff0c;我使用的是第一种方法。…

网站图片全自动加密_网站常见反爬解决方法

码农三哥愿与大家每日分享java开发过程中笔记和互联网人工智能技术文章&#xff0c;愿你我互交流&#xff0c;共同成长&#xff01;目前&#xff0c;许多网站采取了各种各样的措施来反爬虫&#xff0c;通常一个网站都会使用下面的多种反爬&#xff0c;越是数据价值高的网站反爬…

如何将网站前端如何添加登录密码访问_python 爬虫如何突破登录验证

我用 python 做爬虫爬过不少数据&#xff0c;比如在 google play 爬应用信息&#xff1b;在 instragram, 500px 爬图片&#xff1b;当然爬虫的作用不止于此&#xff0c;比如定时去某个网站签到&#xff0c;妈妈再也不用担心我忘记签到了这些网站支持游客访问&#xff0c;但要访…

互联网站总量达1.72亿Apache仍居第一(组图)

2008.07.08 来自&#xff1a;驱动之家  据Netcraft统计,互联网上的网站总量在今年6月份已经达到172338726个,一个月内增长了390万个,其中ThePlanet.com新增了63.2万个,使其成为全球第六大主机服务提供商. 据Netcraft统计,互联网上的网站总量在今年6月份已经达到172338726个,一…

linux 静态 nginx,使用Nginx部署静态网站

这篇文章将介绍如何利用Nginx部署静态网站。之前写过2篇有关Nginx的文章&#xff0c;一篇是《利用nginx&#xff0c;腾讯云免费证书制作https》&#xff0c;另外一篇是《linux安装nginx》&#xff0c;如果有需要可以看一下&#xff0c;这一篇文章介绍如何使用Nginx部署静态网站…

网站攻击软件_公安某局DDoS攻击软件检验案例

1. 基本案情2019年9月&#xff0c;公安某局抓获涉嫌非法控制计算机信息系统的犯罪嫌疑人杨某、兰某等人&#xff0c;现场查获笔记本电脑一台。据嫌疑人交待&#xff0c;其利用笔记本电脑中的黑客软件对目标网站进行攻击&#xff0c;导致目标网站瘫痪&#xff0c;无法正常访问&a…

服务器网站绑定域名网站建设,网站搭建发布:添加域名NS记录解析

域名NS记录应该也算比较常用&#xff0c;比如你在新网买了域名&#xff0c;但你想使用DNSPod来解析域名&#xff0c;那么你就需要把DNS服务器换成DNSPod的&#xff0c;同时添加域名NS记录才可以使用。一、什么是域名NS记录NS(NameServer)记录是域名服务器记录&#xff0c;用来指…

wordpress插件之All in One SEO Pack:整体优化你的wordpress博客

一&#xff0c;什么是All in One SEO Pack&#xff1f; All in One SEO Pack&#xff0c;wordpress的一个seo插件&#xff0c;用这一个插件你就可以实现wordpress的整体优化。 不需要title插件&#xff0c;meta插件&#xff0c;tag插件&#xff0c;也不需要DupPrevent Plugin插…

学习豆瓣好榜样--网站架构

这次的 QCon 会议&#xff0c;《豆瓣网技术架构的发展历程》这个议题差不多是最受关注的。洪强宁在演讲开始告诫大家期望值不要太高&#xff0c;我还是相信不会有人觉得失望的。 先说几句题外话&#xff0c;整个演讲听下来&#xff0c;我们会发现豆瓣在发展的过程中也是有点弯路…