i scrapy verwendet kürzlich zu kratzen Zoom i testen dann das unten stehende URLwie mit escaped_fragment umgehen scrapy mit
http://subscriber.zoominfo.com/zoominfo/#!search/profile/person?personId=521850874&targetid=profile
aber einige, wie in Terminal, verändert es wie dieses
[scrapy] DEBUG: Crawled (200) <GET http://subscriber.zoominfo.com/zoominfo/?_escaped_fragment_=search%2Fprofile%2Fperson%3FpersonId%3D521850874%26targetid%3Dprofile>
Ich habe hinzugefügt AJAXCRAWL_ENABLED = True
in setting.py
aber die URL hat immer noch escaped_fragment
. Ich bezweifle, dass ich nicht die richtige Seite eingegeben habe, die ich will.
Der spider.py
Code ist unten:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
from scrapy.selector import Selector
from scrapy.http import Request, FormRequest
from tutorial.items import TutorialItem
from scrapy.spiders.init import InitSpider
class LoginSpider(InitSpider):
name = 'zoominfo'
login_page = 'https://www.zoominfo.com/login'
start_urls = [
'http://subscriber.zoominfo.com/zoominfo/#!search/profile/person?personId=521850874&targetid=profile',
]
headers = {
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate, br",
"Accept-Language":"en-US,en;q=0.5",
"Connectionc":"keep-alive",
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0",
}
def init_request(self):
return Request(url=self.login_page, callback=self.login)
def login(self, response):
print "Preparing Login"
return FormRequest.from_response(
response,
headers=self.headers,
formdata={
'task':'save',
'redirect':'http://subscriber.zoominfo.com/zoominfo/#!search/profile/person?personId=521850874&targetid=profile',
'username': username,
'password': password
},
callback=self.after_login,
dont_filter = True,
)
def after_login(self, response):
if "authentication failed" in response.body:
self.log("Login unsuccessful")
else:
self.log(":Login Successfully")
self.initialized()
return Request(url='http://subscriber.zoominfo.com/zoominfo/', callback=self.parse)
def parse(self, response):
base_url = 'http://subscriber.zoominfo.com/zoominfo/#!search/profile/person?personId=521850874&targetid=profile'
sel = Selector(response)
item = TutorialItem()
divs = sel.xpath("//div[3]//p").extract()
item['title'] = sel.xpath("//div[3]")
print divs
request = Request(base_url, callback=self.parse)
yield request
dank mir jemand einen Tip geben könnte.
so meinen Sie, dass ich schon die richtige Seite eingegeben haben, was ich will? Aber warum die URL im Terminal passiert ist anders als die, die ich will, einschließlich der '/' wird in '% 2F', und auch die '?' wird zum '% 3F'. –
@PeterTsung, weil alle sensiblen Zeichen nach '#!' Maskiert werden, da sie nicht Teil der URL sind. Mit anderen Worten, das sind Bits, die nicht für Ihren Browser gedacht sind, sondern für den Webseiten-Server. – Granitosaurus
Sie meinen also, dass ich bereits die richtige Seite eingegeben habe, die ich möchte, obwohl die URL im Terminal sich von der im Code unterscheidet? –