我想从该网站提取联系信息: http://www.smtnet.com/company/index.cfm?fuseaction=view_company&company_id=49509 我已经通过以下代码完成了
:from scrapy.selector import Selector
from selenium import webdriver
driver = webdriver.Chrome('D:\chromedriver_win32\chromedriver.exe')
driver.get( "http://www.smtnet.com/company/index.cfm?fuseaction=view_company&company_id=49509")
sel = Selector(text=driver.page_source)
Company_Name = sel.xpath('*//p[1]/strong/text()').extract_first()
Country=sel.xpath('*//p[2]/text()').extract()[-2]
webSite = ????
但是我无法精确定位公司网站,应该是https://www.europlacer.com/。
可以告诉我如何提取它吗?
答案 0 :(得分:1)
如果您只想使用“访问网站”按钮的href
属性,请使用以下方法:
Company_URL = sel.xpath("//div[@id = 'tabs-1']/p[3]/a/@href").extract_first()
但是,上面的代码只会返回以下内容:
act_open_company_page.cfm?url_id=70098
由于公司的网址(即'https://www.europlacer.com/')未直接存储在href
属性中。 (稍后将使用javascript解决)但是,如果您仔细查看源代码:
<a onclick="return trackOutboundLink('company_url','http://www.europlacer.com','49509');" href="act_open_company_page.cfm?url_id=70098" target="_blank" class=""><img src="/images/buttons/visit-website.jpg" alt="Visit EUROPLACER website" class=""></a>
您可以看到直接URL作为onclick
属性中函数的参数存在,因此您需要从那里提取它。首先,要提取onclick
属性的值,请执行以下操作:
URL = sel.xpath("//div[@id = 'tabs-1']/p[3]/a/@onclick").extract_first()
然后从中提取所需的URL,如下所示:
URL = URL.split(",")[1]
URL = URL.strip("\'") // to remove the leading and trailing quotes
提取URL的另一种方法是实际解析href
属性的值。您可以看到,当您单击链接时,它变为:
http://www.smtnet.com/company/act_open_company_page.cfm?url_id=70098
因此,诀窍是在主机名(“ http://www.smtnet.com”前面加上,加载URL,然后在更改后提取提取的URL。但是我在答案中描述的第一种方法会容易得多。
除了公司名称,我想您应该尝试以下方法:
Company_Name = sel.xpath('//header/h1/text()').extract_first()
因此,以上行仅打印公司名称(即“ EUROPLACER”)。您的代码也会包含一些文本。
答案 1 :(得分:0)
当您检查开发者控制台中的访问网站按钮时,您会看到
<a onclick="return trackOutboundLink('company_url','http://www.europlacer.com','49509');" href="act_open_company_page.cfm?url_id=70098" target="_blank">
<img src="/images/buttons/visit-website.jpg" alt="Visit EUROPLACER website">
</a>
您想要获取Anchor元素,并像这样从onclick属性中检索URL
company_link_handler = sel.xpath('//*[@id="tabs-1"]/p[3]/a').attrib.get('onclick')
website = company_link_handler.split(',')[1]
答案 2 :(得分:0)
第一
查找唯一元素:您不能使用CSS类或元素的ID来获取元素,因此必须找到一个唯一元素来帮助您获取目标元素。 img
可以为您提供帮助:
因此,您可以这样获得它:
sel.xpath('//img[@src="/images/buttons/visit-website.jpg"]')
第二
获取目标元素:这个独特元素如何为您提供帮助?具有公司URL的元素是其父节点(我们可以通过/..
来访问它),我们需要其onclick
:
sel.xpath('//img[@src="/images/buttons/visit-website.jpg"]/../@onclick')
最后一步
提取所需的文本:您可以使用许多方法和工具,我只测试了regex即可正常工作:
s=sel.xpath('//img[@src="/images/buttons/visit-website.jpg"]/../@onclick').extract_first()
x=re.search("(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s']{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s']{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s']{2,}|www\.[a-zA-Z0-9]\.[^\s']{2,})",s)
result=x.group(0)
请注意,我所做的更改很少,并使用了here中提到的正则表达式模式。不要忘记也导入re
软件包。