我试图从列表详细信息页面抓取内容,只有点击“查看”视图才能查看该内容。触发表单提交的按钮。我是Python和Scrapy的新手
示例标记
<li><h3>Abc Widgets</h3>
<form action="/viewlisting?id=123" method="post">
<input type="image" src="/images/view.png" value="submit" >
</form>
</li>
我在Scrapy中的解决方案是提取表单操作,然后使用Request返回带有回调的页面,以便为所需内容进行解析。但是我遇到了一些问题
我收到以下错误&#34;请求网址必须是str或unicode&#34;
其次,当我对URL进行硬编码以克服上述问题时,似乎我的解析功能正在返回看似列表的内容
这是我的代码 - 对真实网址的反应
from scrapy.spiders import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from wfi2.items import Wfi2Item
class ProfileSpider(Spider):
name = "profiles"
allowed_domains = ["wfi.com.au"]
start_urls = ["http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=WA",
"http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=VIC",
"http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=QLD",
"http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=NSW",
"http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=TAS"
"http://example.com/wps/wcm/connect/internet/wfi/Contact+Us/Find+Your+Local+Office/findYourLocalOffice.jsp?state=NT"
]
def parse(self, response):
hxs = Selector(response)
forms = hxs.xpath('//*[@id="area-managers"]//*/form')
for form in forms:
action = form.xpath('@action').extract()
print "ACTION: ", action
#request = Request(url=action,callback=self.parse_profile)
request = Request(url=action,callback=self.parse_profile)
yield request
def parse_profile(self, response):
hxs = Selector(response)
profile = hxs.xpath('//*[@class="contentContainer"]/*/text()')
print "PROFILE", profile
答案 0 :(得分:2)
- 我收到以下错误“请求网址必须是str或unicode”
醇>
请查看 request = Request(url=response.urljoin(action[0]), callback=self.parse_profile)
的scrapy文档。 It says:“序列化并返回匹配的节点作为列表的unicode字符串”(由我添加粗体)。
列表的第一个元素可能就是你想要的。所以你可以这样做:
SelectorList
- 其次,当我硬编码URL以克服上述问题时,似乎是我的 解析函数返回看似列表的内容
醇>
根据xpath的文档,它是extract()
。将xpath
添加到{{1}},您将获得包含文本标记的列表。最终,您希望在进一步处理之前清理并加入列出的元素。