request库用python3怎么伪装header爬取知乎

request库用python3怎么伪装header爬取知乎,第1张

python网页抓取功能非常强大,使用urllib或者urllib2可以很轻松的抓取网页内容。但是很多时候我们要注意,可能很多网站都设置了防采集功能,不是那么轻松就能抓取到想要的内容。

爬取的网站为:stat-nbacom,本文爬取的是NBA2016-2017赛季常规赛至2017年1月7日的数据

改变url_header和url_tail即可爬取特定的其他数据。

源代码如下:

[python] view plain copy

#coding=utf-8

import sys

reload(sys)

syssetdefaultencoding('utf-8')

import requests

import time

import urllib

from bs4 import BeautifulSoup

import re

from pyExcelerator import 

def getURLLists(url_header,url_tail,pages):

"""

获取所有页面的URL列表

"""

url_lists = []

url_0 = url_header+'0'+url_tail

print url_0

url_listsappend(url_0)

for i in range(1,pages+1):

url_temp = url_header+str(i)+url_tail

url_listsappend(url_temp)

return url_lists

def getNBAAllData(url_lists):

"""

获取所有2017赛季NBA常规赛数据

"""

datasets = ['']

for item in url_lists:

data1 = getNBASingleData(item)

datasetsextend(data1)

#去掉数据里的空元素

for item in datasets[:]:

if len(item) == 0:

datasetsremove(item)

return datasets

def getNBASingleData(url):

"""

获取1个页面NBA常规赛数据

"""

QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017'

# html = requestsget(url)text

html = urlliburlopen(url)read()

# print html

soup = BeautifulSoup(html)

data = souphtmlbodyfind('tbody')text

list_data = datasplit('\n')

# with open('nba_datatxt','a') as fp:

#     fpwrite(data)

# for item in list_data[:]:

#     if len(item) == 0:

#         list_dataremove(item)

return list_data

def saveDataToExcel(datasets,sheetname,filename):

book = Workbook()

sheet = bookadd_sheet(sheetname)

sheetwrite(0,0,u'序号')

sheetwrite(0,1,u'球队')

sheetwrite(0,2,u'时间')

sheetwrite(0,3,u'结果')

sheetwrite(0,4,u'主客')

sheetwrite(0,5,u'比赛')

sheetwrite(0,6,u'投篮命中率')

sheetwrite(0,7,u'命中数')

sheetwrite(0,8,u'出手数')

sheetwrite(0,9,u'三分命中率')

sheetwrite(0,10,u'三分命中数')

sheetwrite(0,11,u'三分出手数')

sheetwrite(0,12,u'罚球命中率')

sheetwrite(0,13,u'罚球命中数')

sheetwrite(0,14,u'罚球出手数')

sheetwrite(0,15,u'篮板')

sheetwrite(0,16,u'前场篮板')

sheetwrite(0,17,u'后场篮板')

sheetwrite(0,18,u'助攻')

sheetwrite(0,19,u'抢断')

sheetwrite(0,20,u'盖帽')

sheetwrite(0,21,u'失误')

sheetwrite(0,22,u'犯规')

sheetwrite(0,23,u'得分')

num = 24

row_cnt = 0

data_cnt = 0

data_len = len(datasets)

print 'data_len:',data_len

while(data_cnt< data_len):

row_cnt += 1

print '序号:',row_cnt

for col in range(num):

# print col

sheetwrite(row_cnt,col,datasets[data_cnt])

data_cnt += 1

booksave(filename)

def writeDataToTxt(datasets):

fp = open('nba_datatxt','w')

line_cnt = 1

for i in range(len(datasets)-1):

#球队名称对齐的 *** 作:如果球队名字过短或者为76人队是 球队名字后面加两个table 否则加1个table

if line_cnt % 24 == 2 and len(datasets[i]) < 5 or datasets[i] == u'费城76人':

fpwrite(datasets[i]+'\t\t')

else:

fpwrite(datasets[i]+'\t')

line_cnt += 1

if line_cnt % 24 == 1:

fpwrite('\n')

fpclose()

if __name__ == "__main__":

pages = int(1132/150)

url_header = 'hppage='

url_tail = '&QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017#label_show_result'

url_lists = getURLLists(url_header,url_tail,pages)

datasets = getNBAAllData(url_lists)

writeDataToTxt(datasets)

sheetname = 'nba normal data 2016-2017'

str_time = timestrftime('%Y-%m-%d',timelocaltime(timetime()))

filename = 'nba_normal_data'+str_time+'xls'

saveDataToExcel(datasets,sheetname,filename)

试试这样

header = {

"content-type": "application/json",

"a": jsondumps({"b": "b_value"}),

"some_param": jsondumps({"some_key_value": "some_string"})

}

也就是说用jsondumps把多余的嵌套变成字符串

程序如下:

#!/usr/bin/env python

#coding=utf-8

#读取pcap文件,解析相应的信息,为了在记事本中显示的方便,把二进制的信息

import struct

fpcap = open('testpcap','rb')

ftxt = open('resulttxt','w')

string_data = fpcapread()

#pcap文件包头解析

pcap_header = {}

pcap_header['magic_number'] = string_data[0:4]

pcap_header['version_major'] = string_data[4:6]

pcap_header['version_minor'] = string_data[6:8]

pcap_header['thiszone'] = string_data[8:12]

pcap_header['sigfigs'] = string_data[12:16]

pcap_header['snaplen'] = string_data[16:20]

pcap_header['linktype'] = string_data[20:24]

#把pacp文件头信息写入resulttxt

ftxtwrite("Pcap文件的包头内容如下: \n")

for key in ['magic_number','version_major','version_minor','thiszone',

'sigfigs','snaplen','linktype']:

ftxtwrite(key+ " : " + repr(pcap_header[key])+'\n')

#pcap文件的数据包解析

step = 0

packet_num = 0

packet_data = []

pcap_packet_header = {}

i =24

while(i<len(string_data)):

#数据包头各个字段

pcap_packet_header['GMTtime'] = string_data[i:i+4]

pcap_packet_header['MicroTime'] = string_data[i+4:i+8]

pcap_packet_header['caplen'] = string_data[i+8:i+12]

pcap_packet_header['len'] = string_data[i+12:i+16]

#求出此包的包长len

packet_len = structunpack('I',pcap_packet_header['len'])[0]

#写入此包数据

packet_dataappend(string_data[i+16:i+16+packet_len])

i = i+ packet_len+16

packet_num+=1

#把pacp文件里的数据包信息写入resulttxt

for i in range(packet_num):

#先写每一包的包头

ftxtwrite("这是第"+str(i)+"包数据的包头和数据:"+'\n')

for key in ['GMTtime','MicroTime','caplen','len']:

ftxtwrite(key+' : '+repr(pcap_packet_header[key])+'\n')

#再写数据部分

ftxtwrite('此包的数据内容'+repr(packet_data[i])+'\n')

ftxtwrite('一共有'+str(packet_num)+"包数据"+'\n')

ftxtclose()

fpcapclose()

最终得到的result文件如下所示:字段显示的都是十六进制,其中的数据部分和wireshark打开,显示的十六进制窗口一样。

1、首先链家网二手房主页最多只显示100页的房源数据,所以在收集二手房房源信息页面URL地址时会收集不全,导致最后只能采集到部分数据;解决方法是解决措施:将所有二手房数据分区域地进行爬取,100页最多能够显示3000套房,该区域房源少于3000套时可以直接爬取,如果该区域房源超过3000套可以再分成更小的区域。

2、其次爬虫程序如果运行过快,会在采集到两、三千条数据时触发链家网的反爬虫机制,所有的请求会被重定向到链家的人机鉴定页面,从而会导致后面的爬取失败;解决方法是为程序中每次>

以上就是关于request库用python3怎么伪装header爬取知乎全部的内容,包括:request库用python3怎么伪装header爬取知乎、如何用python爬取nba数据中心的数据、Python中用request添加headers发送请求,headers中数据只能是str或bytes吗,里面还有字典dict格式怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10142720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存