我试图实现一个请求被发送后,点击继续按钮,从这个website,但响应总是一些xml代码,而不是html。
def start_requests(self):
codes = range(2022010002,2022010003)
for code in codes:
fd = {'EDTPERMITNBR': f'{code}',
'BTNGUESTLOGIN': '',
'IW_FormName': 'FrmMain',
'IW_FormClass': 'TFrmMain',
'IW_width': '652',
'IW_height': '797',
'IW_Action': 'BTNGUESTLOGIN',
'IW_ActionParam': '',
'IW_Offset': '',
'IW_SessionID_': 'S1uxlkMRpiOnzXriVlSIoBbAqJS',
'IW_TrackID_': '10',
'IW_WindowID_': 'I1',
'IW_AjaxID': str(time.time())[:15].replace('.','')}
url = 'https://cdplusmobile.marioncountyfl.org/pdswebservices/PROD/webpermitnew/webpermits.dll/S1uxlkMRpiOnzXriVlSIoBbAqJS/$/callback?callback=BTNGUESTLOGIN.DoOnAsyncClick&x=138&y=32&which=0&modifiers='
yield scrapy.FormRequest(url,method='post',formdata=fd,headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'})
字符串
1条答案
按热度按时间watbbzwu1#
请记住,网络抓取是一项复杂的任务,具有潜在的法律的和道德复杂性。您必须遵守您要删除的网站的使用条款,并确保您的行为符合适用的法律法规。
您似乎遇到了这样一种情况,即您接收的是XML而不是HTML。如果服务器将XML作为响应格式发送,或者如果您正在处理 AJAX 端点,则可能会发生这种情况,AJAX端点通常被设计为返回XML、JSON或其他数据格式,而不是完整的HTML页面。
与HTML不同,Scrapy本身并不管理XML响应。对于XML,您需要使用lxml或BeautifulSoup等库来解析它。
下面是在Scrapy spider中实现此功能的方法:
字符串
确保将'your_tag'替换为您感兴趣的实际XML标记。
但是,如果您预期的是HTML而不是XML,那么服务器可能会根据请求头来决定响应格式。您可以尝试添加“Accept”:'text/html'到你的标题,以表明你更喜欢一个HTML响应:
型
最后,值得注意的是,表单数据中的“IW_SessionID_”似乎是一个会话ID,每次在服务器上启动会话时,它都可能会更改。如果是这种情况,您需要找到一种方法来动态地获取每个新会话的会话ID。这可能包括首先向页面发送GET请求,从响应中解析会话ID,然后在POST请求中使用该会话ID。
需要强调的是,表单数据中的“IW_SessionID_”似乎是一个会话ID,它可能在服务器上每次启动新会话时都会更改。如果是这样,您需要设计一个方法来动态地获取每个新会话的会话ID。这可能包括首先向页面发出GET请求,从响应中提取会话ID,然后在POST请求中使用该会话ID。
同样值得注意的是,您似乎正在抓取使用Intraweb的网站。Intraweb是一个基于AJAX的Web应用程序开发框架。由于它是动态的,即时生成的请求,因此抓取可能更具挑战性,并且可能需要更高级的抓取方法或能够执行JavaScript的工具,例如Selenium或Pyppeteer。